2

バイナリ Linux を完全な静的にコンパイルしたいのですが、この構成では常に失敗します。

CFLAGS="--static" CPPFLAGS="-I/home/alan/arm/arm-none-linux-gnueabi/libc/usr/include" LDFLAGS="-L/home/alan/arm/arm-none-linux-gnueabi/libc//usr/lib" LIBS="-lcrypt -ldl -lpthread -lm -lc -lstdc++" CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar CXX=arm-none-linux-gnueabi-g++ ./configure --host=arm-none-linux-gnueabi target=arm-none-linux-gnueabi --prefix=/home/alan/armbin/test --without-pcre --without-zlib --without-bzip2 --without-openssl --disable-ipv6 --enable-static

しかし、常にdlopen、gethostbynameなどの警告が表示されます。libc、libmなどを共有しない場合。おおよそ次のような警告が表示されます。

warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

どうもありがとうございました。

4

2 に答える 2

2

-pthreadの代わりに使用し-lpthreadます。

ソース

于 2013-02-26T18:53:50.473 に答える
0

リンク コマンドは次のようになります:
g++ objectFiles $(CFLAGS) -o executable -Wl,-Bstatic -L/path/to/static/lib1/ -ls1 -L/path/to/static/lib2 -ls2 -Wl -バダイナミック

静的ライブラリ libs1.a、libs2.a を明示的に呼び出す必要があるだけです。参照している共有システム ライブラリ (libc.so、libpthreads.so、libm.so、libdl.so、libstdc++.so など) は、リンカーによって暗黙的に検出され、-Wl、-Bdynamic の影響を受けます。それらを明示的に渡す必要はありません。動的な依存関係を確認するには、「ldd 実行可能ファイル」を実行してみてください。

于 2013-08-16T00:20:55.617 に答える