main.cpp
を含む単純なものをコンパイルしようとしていますboost/python.hpp
。
次のように:
#include <boost/python.hpp>
int main() {
return 0;
}
git-bash
シェルから MSVC コマンド ライン ツールを使用しています。にcl.exe
ある環境変数が必要であることはわかっていvcvars32.bat
ます。
これが私のコンパイル/リンク方法ですmain.cpp
:
# Since I'm using git-bash, I can use '-' instead of '/' for options, also
# `clwrap` is a tiny script that runs vcvars32.bat and forward arguments to `cl.exe`
# `python27.lib` and the boost.python lib are automatically autolink
$ clwrap -MD -I/c/Python27/include -I$BOOST_ROOT main.cpp -link -LIBPATH:"C:\\Python27\\libs" -LIBPATH:"C:\\Users\\Charly\\works\\cpp\\boost_1_57_0\\stage\\lib"
私がこれを行っているとき、これはリンクエラーで終わります:
main.obj : error LNK2019: unresolved external symbol __imp___Py_NoneStruct referenced in function "public: __thiscall boost::python::api::object::object(void)" (??0object@api@python@boost@@QAE@XZ)
そこで、python27.lib
ファイルをチェックして、不足しているシンボルがここにあるかどうかを確認することにしました。
$ nm /c/Python27/libs/python27.lib | grep Py_None
なし!!
しかし、シンボルは私の中にありますlibpython27.a
:
$ nm /c/Python27/libs/libpython27.a | grep Py_None
00000000 I __imp__Py_NoneStruct
00000000 T _Py_NoneStruct
インストーラー(64ビット)python
を使用してインストールしました。私は良い.msi
と構築しました。ビルド用の CLI は次のとおりです。boost.python
address-model=64
boost.python
.\bootstrap.bat
.\b2 --with-python --build-type=complete address-model=64 variant=release link=shared toolset=msvc
私は何か見落としてますか?インストーラーはpython
バグっていますか?(似たような問題を見つけました)...
正直なところ、いろいろ試しましたが、Windows の開発環境にもあまり慣れていないので、何か見落としているかもしれません。
ありがとう!