静的ライブラリを共有ライブラリにリンクしようとしていますが、次のエラーが発生しています
/usr/bin/ld:../../../libraries/log4cplus/liblog4cplus.a(fileappender.o):「ローカルシンボル」に対する再配置R_X86_64_32Sは、共有の作成時に使用できませんオブジェクト; -fPIC ../../../ libraries/log4cplus/liblog4cplus.aで再コンパイル:シンボルを読み取れませんでした:不正な値 collect2:ldが1つの終了ステータスを返しました
しかし、これはそのようなエラーなしで32ビットマシンで機能しました。 -fPIC
フラグをMakefileに手動で追加しようとしましたが、これも問題を解決しませんでした
提案どおり-whole-archive
フラグを試してみました here が成功しませんでした。
/usr/bin/ld:../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o):「vtable for log4cplus :: spi :: AppenderAttachable」に対する再配置R_X86_64_32Sはできません共有オブジェクトを作成するときに使用します。 -fPIC ../../../ libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o)で再コンパイル:シンボルを読み取れませんでした:不正な値 collect2:ldが1つの終了ステータスを返しました
unzip log4cplus-1.1.0.Zip
./configure --enable-static=yes --enable-threads=yes
vi Makefile
および-fPICをCXXFLAGSおよびCFLAGSに追加make
g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cpp
g++ -shared -fPIC -frtti -I"Include_Directory" -o mysofile.so myfile.o -Wl,--whole-archive "../../../libraries/log4cplus/liblog4cplus.a" -Wl,--no-whole-archive -ldl
共有ライブラリを生成していると仮定すると、最も起こりそうなことは、使用しているliblog4cplus.a
のバリアントが-fPIC
でコンパイルされていないことです。 Linuxでは、静的ライブラリからオブジェクトファイルを抽出し、 それらの再配置を確認する でこれを確認できます。
ar -x liblog4cplus.a
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'
出力が空の場合、静的ライブラリは位置に依存せず、共有オブジェクトの生成に使用できません。
静的ライブラリには既にコンパイルされたオブジェクトコードが含まれているため、-fPICフラグを指定しても役に立ちません。
liblog4cplus.a
でコンパイルされた-fPIC
のバージョンを取得し、代わりにそのバージョンを使用する必要があります。
次のようなCCD lib(libccd)を必要とするFCLをインストールすると、同様のエラーが発生します。
/ usr/bin/ld:/usr/local/lib/libccd.a(ccd.o):「ローカルシンボル」に対する再配置R_X86_64_32Sは、共有オブジェクトの作成時に使用できません。 -fPICで再コンパイルする
「libccd.a」という名前の2つの異なるファイルがあることがわかりました。
最初のファイルを削除することで問題を解決しました。
未定義のシンボルに対するR_X86_64_PC32の再配置は、通常、LDFLAGSがハードニングで設定され、CFLAGSが設定されていない場合に発生します。
たぶんユーザーエラー:
リンク時に-specs =/usr/lib/rpm/redhat/redhat-hardened-ldを使用している場合は、-specs =/usr/lib/rpm/redhat/redhat-hardenedも使用する必要があります。 -cc1をコンパイル時に使用し、同時にコンパイルとリンクを行う場合は、両方が必要か、または-specs =/usr/lib/rpm/redhat/redhat-hardened-ldを削除する必要があります。一般的な修正:
https://bugzilla.redhat.com/show_bug.cgi?id=1304277#c
https://github.com/rpmfusion/lxdream/blob/master/lxdream-0.9.1-implicit.patch