【发布时间】:2017-10-24 12:44:44
【问题描述】:
我在链接 boost python 时遇到问题。
我正在使用 Visual Studio 2017 并使用以下命令行编译了 boost 1_64 包:
b2 -a toolset=msvc-14.1 --build_type=complete stage variant=debugthreading=multi link=shared runtime-link=shared define=_ITERATOR_DEBUG_LEVEL=0 address-model=64
使用这个 user-config.jam:
using python
: 3.6 # Version
: C:\\Python36\\python.exe # Python Path
: C:\\Python36\\include # include path
: C:\\Python36\\libs # lib path(s)
: <define>BOOST_ALL_NO_LIB=1
;
但是在使用运行时库构建我的 c++ 项目时:多线程 DLL (/MD) 我不断收到此错误消息:
Error LNK1104 cannot open file 'boost_python-vc141-mt-gd-1_64.lib'
但我编译的 boost 库包含以下 boost_python 文件:
boost_python3-vc141-mt-gd-1_64.dll
boost_python3-vc141-mt-gd-1_64.lib
有人对 python 3 的 boost 有经验吗?经过数小时的尝试,我找不到一个好的解决方案。 顺便说一句:将文件重命名为 boost_python- (删除 3)工作正常。 但我不认为这是正确的方法
VC 项目设置:
添加。包含目录:
C:\Python36\include;D:\ws\boost_1_64_0\boost_1_64_0;
添加。库目录:
D:\ws\boost_1_64_0\boost_1_64_0\stage\lib;C:\Python36\libs;
已关闭:boost 的自动链接功能在 python 3 中无法正常工作。boost_module_name 宏设置为 boost_python(缺少 3),并且生成的库包含 3。
--> 关闭自动链接并手动添加所需的库。
解决方案 a) 转到 boost/python/detail/config.hpp 并将 BOOST_LIB_NAMe 更改为 boost_python3 而不是 boost_python。
或
解决方案 b) 通过定义 BOOST_ALL_NO_LIB 开启自动链接,然后显式设置 boost_python3...lib 为链接器依赖项。
【问题讨论】:
-
C++ 项目的构建命令是什么?你使用类似
distutils.extension的东西吗? -
我没有使用任何特殊的扩展或设置。我所做的只是创建一个 c++ 32 控制台应用程序项目并将代码生成更改为 DLL。并添加了所需的包含路径
-
请提供足够的信息。您的 C++ 代码是如何编译的,尤其是如何链接的?给出完整的命令。否则,恐怕我们无法真正帮助您。
-
有没有办法从 Visual Studio 获取命令?
-
我怀疑VS试图构建一个python(版本2),而不是python3模块。
标签: python c++ boost linker visual-studio-2017