私は次の問題を抱えていますが、それは良い解決策がないようです。
たとえば、libtiffとlibX11を使用するCLIユーティリティがあります。このユーティリティの2つのバージョンを作成したいと思います。動的リンクと静的リンクです(可能な限り多くの依存関係がコンパイルされています)。
動的リンクの場合、すべてが魅力として機能します。指定する必要があり-ltiff -lX11
、リンカーは、libtiff.so
およびを参照する優れた実行可能ファイルを生成しますlibX11.so
。
静的リンクの場合、状況はさらに悪化します。次のコマンドを使用すると、次のようになります。
g++ -static-libgcc -Wl,-static -o my.out *.o -lc -ltiff -lX11
libtiff.aとlibX11.aで欠落しているシンボルで終わります。OK、依存しているすべてのライブラリを行に入れることができます。
g++ -static-libgcc -Wl,-static -o my.out *.o -lc -ltiff -ljpeg -lz -lX11 -lXau -lxcb -lXdmcp
しかし、私にとってこの発見を可能にするツールはありますか?libtoolはここで役立ちますか(わかります/usr/lib/libtiff.la
が、ありません/usr/lib/libX11.la
)?誰かがlibtoolの基本的な例を教えてもらえますか?libtiff
一部のプラットフォームでより狭い機能が提供され、そのプラットフォームではまったく利用できないリンクがない場合、状況は重大ですlibjpeg
。そのため、ライブラリの依存関係が満たされないため、上記のリンクコマンドは失敗します。
2番目の問題はその警告によるものです(私は信じています):
/usr/lib/libX11.a(xim_trans.o): In function `_XimXTransSocketUNIXConnect':
(.text+0xcda): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
ユーティリティは、出力libc
に表示されたままのに対して静的にリンクされていません。この場合、静的ldd
に正しくリンクするにはどうすればよいですか?libX11
libc
この.a
質問は関連性がありますが、システムファイルを再パックすることはお勧めできません。