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

标签 python c++ windows boost-python msvc12

我正在尝试编译一个简单的 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 安装程序有问题吗? (我发现了一个 issue 关于类似的东西)...

老实说,我尝试了很多东西,而且我不太习惯 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 安装了一些其他包。我不知道这个编译器是否随这些包一起提供,但为了以防万一,这里有 packages .

希望这对您有所帮助!

关于python - 我的 Py_NoneStruct 符号(python、boost.python)在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283992/

相关文章:

python - 使用 sqlalchemy 将 CSV 导入数据库

c++ - gdb:如何在循环执行期间暂停?

c++ - 可以将成员变量(CBrush *)分配给在具有新原因问题的类构造函数中动态分配的内存吗?

c++ - CreateRemoteThread - ERROR_ACCES_DENIED

windows - 批处理文件以 °C 获取 CPU 温度并设置为变量

Python,lambda 的使用

python - 如何执行随机命令行并重现该过程?

windows - 使用 PowerShell 设置嵌套的可扩展环境变量

python - 如何从 SQlAlchemy ORM session 中查询预先存在的表?

c++ - `Error using mex Supported compiler not detected` : can't install a CUDA-compatible C++ compiler for MATLAB