私が使用して動的ライブラリ(dynamicLib.so)に静的ライブラリ(staticLib.a)++グラムとリンクしようとしています:グラム++
g++ *.o -Wl,--whole-archive staticLib.a -Wl,--no-whole-archive -shared -o dynamicLib.so
そして、私はhereと同じエラーを得た:
/usr/bin/ld: staticLib.a(object.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC staticLib.a(object.o): error adding symbols: Bad value collect2: error: ld returned 1 exit status
は、私はいくつかのトピックを読んで、私は私が探しています答えを見つけることができませんでした。 staticLib.aは位置非依存コード(PIC)としてコンパイルされませんでした。 link aboveによれば、それは必須と思われる。しかし、staticLib.aは私が制御できない別のプロジェクトのライブラリです。
私の最初の考えは、オブジェクト*.o using
ar -x(in this second linkのように)を抽出することでした。しかし、問題はオブジェクトが-fPIC
でコンパイルされていないのと同じままです。
自分のMakefileを作成してstaticLib.aを-fPIC
で再コンパイルすることができました(私は既存のプロジェクトを台無しにしたくありません)。しかし、私はそれが良い方法であることを確認していません...
私の質問は以下です:(-fPIC
なしでコンパイルされた)静的ライブラリを動的なものにリンクする方法はありますか?
関連トピック:
私は恐れていました。返信いただきありがとうございます。 – Nicolas