boostコンパイルlibboost_python3

1818 ワード

linuxシステムはpython 2を持参する.7,boostコンパイル後libboost_が生成されますpython27.soですが、libboost_が必要なアプリケーションもあります.python 3、次にコンパイルします.
boostソースファイルディレクトリboost_にアクセス1_67_0、構成はpythonのみをコンパイルし、pythonパスはanaconda 3のpython 3を指す.6.
./bootstrap.sh --with-libraries=python --with-toolset=gcc
./b2 cflags='-fPIC' cxxflags='-fPIC' --with-python include="/qp/3rd/anaconda3/include/python3.6m/"
sudo ./b2 install

コンパイルインストールに成功すると、/usr/local/libの下にlibboost_があります.python36.soとlibboost_python36.a、linkを適用するときに必要なものはlibboost_です.python3.soまたはlibboost_python3.a、ソフトチェーンを作ります.
cd /usr/local/lib
sudo ln -s libboost_python-py36.so libboost_python3.so
sudo ln -s libboost_python-py36.a libboost_python3.a

大成功!
------------------------------------------------------------
2019-05-14補足:
上でコンパイルした後、python moduleを書いてsoファイルにコンパイルし、anaconda 3/lib/python 3.6/site-packages/にソフトリンク(ln-s dirname/xxx.so)が作成され、pythonでimportで使用したいと考えています.ipythonにアクセスできますが、import xxxでエラーが発生しました.
"undefined symbol:  PyString_Type"
anaconda 3ディレクトリでPyStringを検索しましたType、python 2があることに気づいた.7の関連ファイルにPyString_がありますTypeの定義.デフォルトのanacondaにはpython 2があるべきではありません.7のですね.おかしいですね.boostコンパイルディレクトリに入り、./b 2 cleanは再コンパイルしてinstallし、次にxxxを再コンパイルする.so、問題は相変わらずです.仕方なく、元のanaconda 3ディレクトリをバックアップして、再インストールして、上記のコンパイル方法でlibboost_をコンパイルしました.python 3、新しいanaconda 3にxxxを作成します.soのソフトリンク後、ipythonでimport xxxは問題ありません.
後でネットで調べたらlibboostを配置しているということでしたpythonのコンパイル時、python 2.7とpython 3は共存し、python 3のパスとバージョンを指定するには、次のようにします.
./bootstrap.sh --with-python=/qp/3rd/anaconda3/bin/python3 --with-python-version=3.6 --with-python-root=/qp/3rd/anaconda3/lib/python3.6

正直、これが本当に有効かどうか分かりませんが、似たような問題があったら試してみてください.