GNU/Linux >> Linux の 問題 >  >> Linux

リンクエラーに対する再配置R_X86_64_32S

共有ライブラリを生成していると仮定すると、おそらく liblog4cplus.a のバリアントが あなたが使用しているは -fPIC でコンパイルされていません . Linux では、静的ライブラリからオブジェクト ファイルを抽出し、それらの再配置を確認することで、これを確認できます。

ar -x liblog4cplus.a  
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'

出力が空の場合、静的ライブラリは位置に依存せず、共有オブジェクトの生成には使用できません。

スタティック ライブラリには既にコンパイルされたオブジェクト コードが含まれているため、-fPIC フラグを指定しても役に立ちません。

liblog4cplus.a のバージョンを把握する必要があります -fPIC でコンパイル 代わりにそれを使用してください。


-fPIC を追加 CMAKE_CXX_FLAGS の終わりに そして CMAKE_C_FLAG

例:

set( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall --std=c++11 -O3 -fPIC" )
set( CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -Wall -O3 -fPIC" )

これで問題は解決しました。


Linux
  1. Bashスクリプトでのエラー処理

  2. 古いバージョンの libc にリンクして、より広いアプリケーション カバレッジを提供する

  3. とは :-!! Cコードで?

  1. 構成エラー:boost_system に対してリンクできませんでした

  2. .so.2 ファイルとは何ですか?

  3. 共有ライブラリの読み込みエラー (glew)

  1. 動的リンクのしくみ、その使用法、および dylib を作成する方法と理由

  2. .so ファイルとは何ですか?

  3. CentOS 5.6 に extundelete-0.2.0 をインストールできませんでした。エラー:ext2fs ライブラリが見つかりません