5

私は1つのスタティックライブラリlibhelper.aと私の実際の共有オブジェクトライブラリlibtestlib.soを持つプロジェクトを持っています。私の目標は、libhelper.alibtestlib.soにリンクすることです。 Linux/BSDで可能ですか?私がしようとしたテストプログラムを作成したとき、私は次のエラーを得た:スタティックライブラリと共有ライブラリの混在

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

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

ありがとうございます!

+0

"libhelper.aをlibtestlib.soにリンクする"とは何ですか? –

+0

これまでに何を試しましたか?いずれの場合でも、PIC以外のコードを共有ライブラリにリンクする方法はわかりません。静的ライブラリは通常、実行可能ファイルにのみリンクされているため、PICでコンパイルされることはめったにありません。両方のライブラリを実行可能ファイルにリンクすることはできませんか、最初からPICを使用して両方のライブラリを構築することはできませんか? – Philipp

答えて

11

私の目標は、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.alibtestlib.soに含まれる場合

、そしてシンプル:

gcc main.c -ltestlib 

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

gcc main.c -ltestlib -lhelper 

libtestlib.solibhelper.aに依存するように指定する方法はありません。

+0

ありがとう、私は-fPICでlibhelper.aを再構築することができますので、私はそれを続けます。 –

関連する問題