2016-07-07 23 views
0

私はいくつかの静的スタティックライブラリ(--whole-archive経由)にリンクしたいC99共有ライブラリを持っています。 注::すべての静的ライブラリは、-fPICmuslがlibc.aを共有ライブラリにリンクできません

で構築されています。私はユニバーサルLinuxバイナリを構築したいので、muslを使用することにしました。私はMUSLから静的libc.aにリンクしようとすると、私は次のエラーを取得:

# 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ビルドは次のようになります。

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 

答えて

1

exit.loは、なぜあなたのCFLAGSであるアセンブラで記述されます= ' - fPIC'は、あなたが意図する効果がありません。これは1.「musl」のバグか意図的なもので、静的に.soにリンクすることをサポートしていません。

私はすぐに修正が必要な場合にも、ASMを自分で編集することができ、それが意図的でないあると仮定し、「MUSL」

に対してバグを報告します。

最後に、muslをasmなしで構築するように設定できますか?ユニバーサルバイナリのための

ちょっとオフトピックが、他のオプションは以下のとおりです。単にあなたがサポートのLinuxの最も古いバージョンではglibcにリンク

  1. 'musl'に依存するのではなく、LinuxカーネルAPIを直接使用するだけです。
関連する問題