【问题标题】:Boost numpy linker error in Windows VS在 Windows VS 中提升 numpy 链接器错误
【发布时间】:2017-07-12 23:48:09
【问题描述】:

我正在使用 Boost 1.64 和 Visual Studio 来为 python 创建一个模块。具体来说,我正在使用 Boost Numpy 模块来处理模块中的 numpy 数组。

我已经使用以下命令编译了 Boost:

b2 -j8  address-model=32  --user-config=D:\code\libraries\boost_1_64_0\user-config.jam --with-python   --build-type=complete stage --stagedir=stage/win32

在我的代码中,我添加了静态链接定义(我读过的所有帖子似乎都需要它):#define BOOST_PYTHON_STATIC_LIB

当我编译我的代码时发生了两件奇怪的事情:

1) 使用诊断定义 (#define BOOST_LIB_DIAGNOSTIC) 时,它显示编译器链接到 Python 库的 STATIC 版本,但链接到 numpy 库的动态版本:

  • 链接到 lib 文件:libboost_python-vc141-mt-1_64.lib
  • 链接到 lib 文件:boost_numpy-vc141-mt-1_64.lib

当我禁用自动链接并自己添加正确的库时,我最终得到一个未解决的链接器错误:

error LNK2001: unresolved external symbol "class boost::python::numpy::dtype __cdecl boost::python::numpy::detail::get_float_dtype<32>(void)" (??$get_float_dtype@$0CA@@detail@numpy@python@boost@@YA?AVdtype@123@XZ)

奇怪的是,这个错误只在使用 numpy 中使用模板的函数时引发!我实际上可以运行使用不使用模板函数的 boost_numpy 库的代码,它会链接并运行良好! 有谁知道为什么基于模板的函数会引发此链接器错误? 非常感谢任何帮助!

H

【问题讨论】:

    标签: python visual-studio numpy boost


    【解决方案1】:

    我通过添加以下内容修复了链接器错误:

    #define BOOST_NUMPY_STATIC_LIB
    

    所以我现在的序言是:

    1. #define BOOST_PYTHON_STATIC_LIB
    2. #define BOOST_NUMPY_STATIC_LIB

    错误消失了。

    H

    【讨论】:

    • 谢谢你,你为我节省了不少时间。
    猜你喜欢
    • 2023-03-24
    • 2013-01-21
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多