私が働いているチームは、Pythonで使うための共有ライブラリを生成します。このライブラリは完全にC++で、Boostを使ってPythonを公開しています。 Boostライブラリがインストールされていることを保証することはできないので、Boostから必要な機能を共有オブジェクトファイルに静的に引き込みます。 1.47:コンパイルの最終段階は、我々は伝統的にブーストの私たち自身のビルドを使用していた多くのBoostに-fPICを強制的にコンパイルする方法
g++ -o <output> <objects> -Wl,-Bstatic -lboost_python -lboost_regex ... -Wl,-Bdynamic -shared <other_opts>
に見覚えがあるでしょう。このバージョンはかなり古くなっており、更新したいと考えています。私はCentOSの上のyum 7システムを使用して、必要なオブジェクトをインストールするときしかし、奇妙なことに、私は、GCCから次のエラーを取得する:
relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
まあ、私は単にCentOSの7は、ブーストをインストールします(最新のブーストをダウンロードしようと思いました1.53)自分のビルドをしてください。結局のところ、これはいつも私たちのために働いてきました。私はinstructions hereに従うが、私は同じエラーが発生した。ビルドするスタティックライブラリでも-fPICを強制的に使用するにはどうすればよいですか?
あなたは、GCC(あるいは実行時に実行可能)が特注Boostライブラリを発見されていることを確認していますか?実行時にgccや 'LD_LIBRARY_PATH'の' -L'を使ってライブラリ検索ディレクトリを変更できます。 – NicholasM
'cxxflags =" - fPIC "'を使用して、コンパイラフラグを使用するようにboostビルドを指示できます。 'linkflags'という名前の同様の変数があります。 http://www.boost.org/build/doc/html/bbv2/overview/invocation.htmlのboost build documentationを参照してください。 – NicholasM
@NicholasMはい、私のライブラリはldによって使用されていると確信しています。私はこれを強制するためにldに-Lオプションを使用しています。そのリンクをありがとうございました。私が使っていたリンクはこれについて言及していませんでした。 –