*.soオブジェクトを必要とする私の制御できない別のアプリケーションによって使用される共有ライブラリがあります。私のライブラリは、静的にリンクする必要があるsqlite3を利用しています(自己完結型のバイナリが絶対に必要です)。
ライブラリをコンパイルしてリンクしようとすると、次のようになります。
-fpic -flto -pthread -m64
-flto -static -shared
次のエラーが発生します。
/usr/bin/ld: /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
-fPICを使用した再コンパイルとは何に関連していますか?私のコードまたはCRT?
私はすでに-fPICを使用してオブジェクトをコンパイルしようとしましたが、同じ結果になりました。
ありがとう。
編集:
この問題はSQLite3に関連していないようです。
私は次のようにコンパイルしてリンクする単純な1行何もしないライブラリを作成しました。
g++ -c -fPIC -o bar.o bar.cpp
g++ -shared -o bar.so bar.o
しかし、これは好きではありません:
g++ -c -fPIC -o bar.o bar.cpp
g++ -static -shared -o bar.so bar.o
この問題はCRT(crtbeginT.o)に関連しているようです。GCC --with-picなどを再コンパイルする必要がありますか?