6

libhelper.a私は、1 つの静的ライブラリと、実際の共有オブジェクト ライブラリを含む別のプロジェクトを持っていますlibtestlib.so。私の目標は にリンクlibhelper.aすることlibtestlib.soです。Linux/BSDでそれは可能ですか? テストプログラムを作成しようとすると、次のエラーが発生しました。

./prog1:/usr/local/lib/libtestlib.so.1.0: 未定義のシンボル ''

私の推測では、libhelper.a がコンパイルされていなかったために発生していると思われ-fPICますlibtestlib.so。静的ライブラリにも依存する共有ライブラリを使用するプログラムを構築する適切な方法は何ですか?

ありがとう!

4

1 に答える 1

12

私の目標は、libhelper.aをlibtestlib.soにリンクすることです。Linuxでそれは可能ですか?

もちろん。これは行う必要があります:

gcc -shared -fPIC -o libtestlib.so $(OBJS) \
  -Wl,--whole-archive -lhelper -Wl,--no-whole-archive

libhelper.aは-fPICでコンパイルされませんでした

libhelper.aを。で再構築することをお勧めし-fPICます。それが不可能な場合でも、上記のコマンドはで機能しますLinux/ix86が、たとえばでは機能しませんLinux/x86_64

静的ライブラリにも依存する共有ライブラリを使用するプログラムを構築する適切な方法は何ですか?

上記のように含める場合は、次のようlibhelper.aにします。libtestlib.so

gcc main.c -ltestlib

は、あなたが必要とすることすべてです。とのリンクを主張する場合はlibhelper.a、エンドユーザーに次のようにリンクする必要があることを伝える必要があります。

gcc main.c -ltestlib -lhelper

libtestlib.soに依存することを指定する方法はありませんlibhelper.a

于 2011-03-26T20:18:51.760 に答える