【问题标题】:VS LINK cannot open file 'boost_python...' instead of libboost_python3-vc140-mt-gd-1_65VS LINK 无法打开文件 'boost_python...' 而不是 libboost_python3-vc140-mt-gd-1_65
【发布时间】:2017-07-14 21:31:34
【问题描述】:

今天早上我安装了 Python 3.6,得到了我的 b2 配置来编译 boost lib,并且在 lib 路径中确实有两种风格的 libboost_python3...。然后用一个简单的:

#include "stdafx.h"
#include <boost/python.hpp>

char const* greet()
{
    return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

我收到一个链接器错误:

LINK : fatal error LNK1104: cannot open file 'boost_python-vc140-mt-gd-1_63.lib'

我已经搜索过像USING_BOOST_PYTHON3 这样的标志,但我读到的每一篇文章都说它应该是自动的。根据我构建的内容,该 Boost 应该包含正确的库。

This guy 有同样的问题,但从未得到答案。这与我可以访问右侧“类似问题”中的链接一样接近。但我看不出 VS 是如何参与其中的,因为 boost 会选择库。

更新:我刚刚发现:

#if PY_MAJOR_VERSION == 2
#  define BOOST_LIB_NAME boost_python
#elif PY_MAJOR_VERSION == 3
#  define BOOST_LIB_NAME boost_python3
#endif

所以现在看起来为什么我的主要版本是 2 而不是 3?即使我:

#define PY_MAJOR_VERSION 3

就在我的stdafx.h 的顶部,它仍然与 python 2 库链接。 !?

又一次更新: 这么早,我没有“安装”python 2.7,我将附加库设置为C:\cpp\Python27\libs,我只是将它设置为C:\cpp\Python36_3\libs,现在我得到了:

LINK : fatal error LNK1104: cannot open file 'python27.lib'

这是有道理的,因为 boost 试图链接到 2.x 而不是 3.x

【问题讨论】:

    标签: python-3.x boost


    【解决方案1】:

    虽然我脑子里有这一切........

    Boost 检查与您正在使用的任何 python 包含路径。为什么不呢,因为您可能想使用 2.7 或 3.6。所以python包含必须设置在Additional Include Directories中。我把我的设置为 2.7 并且忘记了,我的错。我发现 PY_MAJOR_VERSION 是 Python 定义的。

    我仍然有链接问题,我现在只想链接静态,但是 Boost Python will force dynamic linking of boost, regardless of user options。但那篇文章修复了它。

    然后我仍然没有libboost_python3-vc140-mt-sgd-1_65.lib,而且我刚刚完成了b2 .. --build-type=complete install 可以肯定。我仍然打开了控制台,所以我查找了列表并构建了 boost python-s!无论出于何种原因,b2 为静态链接的 python 库创建了一个文件夹 C:\Boost\lib。所有其他库都位于C:\cpp\boost_1_65_0\stage\lib

    这真是一次冒险!

    【讨论】:

      【解决方案2】:
      #define BOOST_PYTHON_STATIC_LIB 
      

      链接:libboost_python3-vc140-mt-s-1_65_1.lib

      【讨论】:

      • 您能否解释一下这将如何解决 OPs 问题?
      • Boost.python默认使用动态库,所以在windows上应该使用.lib和.dll,如果要使用静态库,必须定义宏并链接静态库
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      相关资源
      最近更新 更多