1

Linuxで共有ライブラリを生成しており、このxmlパーサー「minixml」を使用して、ライブラリのいくつかのxml構成ファイルを解析しています。私が欲しいのは、このxmlパーサーに依存しないことです。そのため、共有ライブラリが使用するようにlibmxml.soと一緒に存在するlibmxml.soを使用する代わりに、ベンダーが提供する静的libmxml.aライブラリを使用します。デプロイ時にlibmxmlに依存しません。フォローしてみましたが、うまくいきません。

gcc -fPIC -o myobject.o -static -lmxml -c myobject.c

しかし、それは警告を与えます

リンクが行われていないため、リンカー入力は使用されていません

私は何が欠けていますか?どんな助けでもいただければ幸いです。

4

2 に答える 2

3

-c はcompile のみを意味するため、警告が表示されます。リンカは決して実行されないため、リンカ コマンドである -lmxml は効果がありません。

-staticは、実行可能ファイル全体を静的にします。これは、静的 libc も意味します。これはあなたが望むものではないかもしれません。libmxml.a でのみ静的にリンクするには、次を使用します。

gcc -fPIC myobject.o -o executable /usr/lib/libmxml.a

また

gcc -fPIC myobject.o -o executable -Wl,-Bstatic -lmxml -Wl,-Bdynamic

実行可能ファイルの代わりに共有ライブラリを作成するには add -shared

于 2012-12-21T12:07:38.433 に答える
1

このために特別に mxml ライブラリをビルドし、PIC コード ( -fPIC) を含む静的ライブラリを作成する必要がありますlibmxml_pic.alibmxml.aには、実行可能ファイルにのみ適した位置依存のコードが含まれています (32 ビット x86 では動作しますが、それでも醜いです) 。

また、ライブラリから mxml シンボルをエクスポートしないようにすることもできます。これは、バージョン スクリプト ( --version-scriptld へ、ドキュメントを参照) を使用するか-fvisibility=hidden、mxml オブジェクトのコンパイル中に渡すことで実行できます。

于 2012-12-21T14:10:40.050 に答える