"relocation R_X86_64_32S against " リンキングエラー
2023-12-09 09:53:03
質問
静的ライブラリを共有ライブラリにリンクしようとしているのですが、以下のエラーが発生します。
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(fileappender.o): relocation R_X86_64_32S against `a local symbol' can't be used when making a shared object; recompile with -fPIC ../../../libraries/log4cplus/liblog4cplus.a: could not read symbols.バッドバリューを読み込むことができませんでした。Bad value collect2: ldは1終了ステータスを返しました
しかし、これは32bitのマシンではそのようなエラーもなく動作しました。試しに
-fPIC
フラグを手動で追加してみましたが、これも問題解決には至りませんでした。
を試してみましたが
-whole-archive
フラグを試してみました。
ここで
を追加しましたが、成功しませんでした。
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): relocation R_X86_64_32S against `vtable for log4cplus::spi::AppenderAttachable' can not be used when making a shared object; recompile with -fPIC ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): could not read symbols: Bad value collect2: ldは1終了ステータスを返した
liblog4cplus.aの作成。
-
unzip log4cplus-1.1.0.zip
-
./configure --enable-static=yes --enable-threads=yes
-
vi Makefile
と、CXXFLAGS と CFLAGS に -fPIC を追加しました。 -
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
をコンパイルして、代わりにそちらを使用します。
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】'std::cout'への未定義の参照