我正在尝试编译一个简单的main.cpp
,它只包含boost/python.hpp
。
如下所示:
#include <boost/python.hpp>
int main() {
return 0;
}
我使用的是git-bash
shell中的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
我确实使用.msi
安装程序(64位)安装了python
。我用好的address-model=64
构建了boost.python
。这是我用于构建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安装了一些其他软件包。我不知道这个编译器是否附带了这些软件包,但以防万一,下面是这些软件包。
希望这能有所帮助!