【问题标题】:Linking against Boost python 3.6. can't find boost_python instead of boost_python3链接到 Boost python 3.6。找不到 boost_python 而不是 boost_python3
【发布时间】: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


【解决方案1】:

你提供

boost_python3-vc141-mt-gd-1_64.dll
boost_python3-vc141-mt-gd-1_64.lib

但错误报告丢失

boost_python-vc141-mt-gd-1_64.lib

(找出不同之处!)

很明显,您的 IDE (VS) 尝试构建 python,而不是 python3 扩展。我不知道 VS,但一定有办法以某种方式改变它。

【讨论】:

  • 我注意到了不同之处,如果不清楚,请见谅。但我仍然找不到在 vs 中配置它的方法
【解决方案2】:

对不起,我来晚了,我自己也经历了同样的废话。结果证明 boost 不能很好地处理两次安装(甚至是 py3.x 本身)

您绝对可以通过进入&lt;boost/python/detail/config.hpp&gt; 并进行快速更改来解决这个问题。为了让 boost 同时适用于 python 2.x(大概是 2.7)和 3.x,我建议更改:

#define BOOST_LIB_NAME boost_python

#if PY_MAJOR_VERSION >=3
  #define BOOST_LIB_NAME boost_python3
#else
  #define BOOST_LIB_NAME boost_python
#endif

【讨论】:

    【解决方案3】:

    我只是想在这里提醒一下,因为这发生在我身上。 Here is the link. 可能是您包含了 2.7 python 标头而不是 3.6。是的,没有什么是显而易见的,它真的让我工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2017-04-27
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      相关资源
      最近更新 更多