2016-07-22 7 views
1

Ubuntu Linuxでg ++ 5.4.0を使用して共有ライブラリを作成しようとしています。スタティックライブラリを共有ライブラリにリンクする

私はPoco C++ライブラリの静的ライブラリ(.aファイル)をビルドしており、それらを静的に共有ライブラリにリンクしたいと考えています。

しかし、動作していません。

私は私のビルドスクリプトに次の文字列を追加しました:次のエラーメッセージが表示されて文句を言い++

-Wl,-whole-archive -lPocoFoundation -Wl,-no-whole-archive 

グラム:

relocation R_X86_64_32S against '-ZTVN4Poco15ArchiveStrategyE' can not be used when making a shared object; recompile with -fPIC 

を誰かが助けることはできますか?

答えて

2

は、コンパイラが示唆何ですか:再コンパイルを-fPIC

と解説:共有オブジェクトは、コード内のアドレスは、アドレス空間内のバイナリイメージのメモリレイアウトに依存しないことを、要件を持っています。静的にリンクされたコードはこれに拘束されず、仮想アドレス空間のすべてのアドレスはリンク時に認識されるため、コードはコンパイル時に決定されない場所に対処する必要はありません。

-fPICコンパイラフラグはP osition I ndependent C ODE(PIC)の編集を可能にします。リンクしようとしている静的ライブラリはPICとしてコンパイルされていないため、リンカーが不平を言っています。解決方法は、PICを有効にして静的ライブラリを再コンパイルすることです。サイドノートでは


:PICは、アドレス空間レイアウトのランダム化(ASLR)、困難脆弱プログラ​​ムの開発を行うことを目的としたセキュリティ対策の基本です。

関連する問題