首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >musl未能将libc.a链接到共享库

musl未能将libc.a链接到共享库
EN

Stack Overflow用户
提问于 2016-07-07 17:03:09
回答 2查看 1.8K关注 0票数 1

我有一个C99共享库,我想将它链接到一些静态静态库中(通过--whole-archive)。注意事项:所有静态库都是用-fPIC构建的

我还想构建一个通用的linux二进制文件,因此决定使用musl。当我尝试从musl链接到静态libc.a时,我得到以下错误:

代码语言:javascript
复制
# Building shared library tgt/Linux-x86_64/mylib/lib/mylib.so
/root/mylib/./tgt/Linux-x86_64/libmusl/bin/musl-gcc -Wl,-whole-archive -L./tgt/Linux-x86_64/libmusl/lib -L./tgt/Linux-x86_64/libz/lib -L./tgt/Linux-x86_64/libssl/lib -L./tgt/Linux-x86_64/libsasl/lib -L./tgt/Linux-x86_64/librdkafka/lib -L./tgt/Linux-x86_64/libcurl/lib -L./tgt/Linux-x86_64/libgjalloc/lib -L./tgt/Linux-x86_64/libavro/lib -L./tgt/Linux-x86_64/libunwind/lib -l:libc.a -l:libpthread.a -l:libz.a -l:libssl.a -l:libcrypto.a -l:libsasl2.a -l:libm.a -l:librt.a -l:libcrypt.a -l:libunwind-x86_64.a -l:librdkafka.a -l:libcurl.a -l:libgjalloc.a -l:libavro.a -Wl,-no-whole-archive -shared -fPIC -o tgt/Linux-x86_64/mylib/lib/mylib.so ./tgt/Linux-x86_64/mylib/obj/myfile.o ./tgt/Linux-x86_64/mylib/obj/myotherfile.o ./tgt/Linux-x86_64/mylib/obj/cJSON.o
/usr/bin/ld: ./tgt/Linux-x86_64/libmusl/lib/libc.a(exit.lo): relocation R_X86_64_PC32 against undefined hidden symbol `__fini_array_start' can not be used when making a shared object
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
make: *** [tgt/Linux-x86_64/mylib/lib/mylib.so] Error 1

我的musl构建看起来像:

代码语言:javascript
复制
cd mystatic_libs_build_dir/musl; \
./configure CFLAGS='-fPIC' \
--enable-shared \
--enable-static \
--prefix=/root/mylib/tgt/Linux-x86_64/libmusl; \
make; make install;
# libmusl is available
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-07 12:00:45

exit.lo将用汇编语言编写,这就是为什么您的CFLAGS='-fPIC‘没有达到您想要的效果。这要么是'musl‘中的bug,要么是故意的,它们不支持静态地链接到. .so's。

我会假设这是无意的,并对'musl‘设置了一个bug。

如果您需要快速修复,您也可以自己编辑asm。

最后,您可能可以将musl配置为在没有asm的情况下构建?

稍微偏离主题,但通用二进制的其他选项是:

  1. 只需链接到您支持的最老版本的Linux上的glibc。
  2. 与其挣扎于对'musl‘的依赖关系,不如直接使用Linux内核api。
票数 1
EN

Stack Overflow用户

发布于 2018-08-02 10:21:37

只要您自己的代码使用CFLAGS="-fPIC -Wa,-mrelax-relocations=no" (您的binutils版本必须是>=2.27)就可以重新编译musl。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38251344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档