1

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.pythonaddress-model=64boost.python

.\bootstrap.bat
.\b2 --with-python --build-type=complete address-model=64 variant=release link=shared toolset=msvc

私は何か見落としてますか?インストーラーはpythonバグっていますか?(似たような問題を見つけました)...

正直なところ、いろいろ試しましたが、Windows の開発環境にもあまり慣れていないので、何か見落としているかもしれません。

ありがとう!

4

1 に答える 1

2

適切な 64 ビット コンパイラを使用して問題を解決してください。

質問を見ると、 myclwrapが を使用していることがわかりますvcvars32.bat。また、cl.exe私のシステムにある(32ビットバージョン)を使用します:

C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\bin\\cl.exe

しかし、ここで別のバージョンのコンパイラを見つけました。

C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\bin\\x86_amd64\\cl.exe

必要な.batスクリプトと一緒に:

C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\bin\\x86_amd64\\vcvarsx86_amd64.bat

VS用に他のパッケージをいくつかインストールしました。このコンパイラにこれらのパッケージが付属しているかどうかはわかりませんが、念のため、パッケージを次に示します。

お役に立てれば!

于 2015-03-27T09:56:30.003 に答える