我的Py_NoneStruct符号(python,boost.python)在哪里?

我想编译一个简单的main.cpp ,其中只包括boost/python.hpp

如下所示:

 #include <boost/python.hpp> int main() { return 0; } 

我使用我的git-bash shell中的MSVC命令行工具。 我知道cl.exe需要一些可以在vcvars32.batfind的环境variables。

这是我编译/链接我的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文件,看是否缺less符号在这里:

 $ 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 

我没有使用.msi安装程序(64位)安装python 。 我用good address-model=64构build了boost.python 。 这里是我build立boost.python CLI:

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

我错过了什么? 是python安装程序的越野车? (我发现了一个类似的问题 )…

说实话,我已经尝试了很多东西,我也不是很习惯Windows开发环境,所以也许我错过了一些东西!

谢谢!

通过使用适当的64位编译器解决我的问题。

如果你看看这个问题,你会看到我的clwrap使用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安装一些其他的软件包。 我不知道这个编译器是否带有这些包,但以防万一,这里是包 。

希望这可以帮助!