3

我正在尝试将 C++ 和 Python 与 Boost.Python 联系起来。

我有 Visual Studio 2012 Express 版本、Python 2.7 和 Boost 1.54。

我按照Boost官方网站的说明在我的机器上安装了Boost,这意味着我遵循了以下步骤:

  1. 我下载预构建的二进制文件并将其安装在C:\local\boost_1_54\.

  2. 我跑 bjam b2 --build-dir=C:\local\boost_1_54 toolset=msvc11.0 --build-type=complete stage

然后我在属性面板中进行了这样的操作:

  1. 添加C:\local\boost_1_54\; C:\Python27\include;到 C/C++->General->Additional Include Directories。

  2. 添加C:\local\boost_1_54\libs; C:\local\boost_1_54\lib64-msvc-11.0; C:Python27\libs;到链接器->常规->附加库目录。

  3. 设置"Not Using Precompiled Headers"为 C/C++->预编译头文件->预编译头文件。

我创建了一个空项目,其中的源代码非常简单,如下所示(我实际上尝试运行一个 hello world 示例,但不得不减少代码以排除干扰):

#include <boost/python.hpp>

int main()
{   
    return 0;
}

但是,当我尝试构建解决方案时,会弹出两个错误:

错误 LNK2001:未解析的外部符号__imp___Py_NoneStruct

错误 LNK1120:1 未解决的外部

我评论了这一行#include <boost/python.hpp>,然后错误就消失了。

让我感到困惑的是,我发现 python.hpp 位于它应该存在的文件夹中。

我可以知道我错了吗?

==================================================== ========

编辑:

我尝试#include <Python.h>在代码中使用。但它引发了另一个错误

错误 LNK1104:无法打开文件“python27_d.lib”

任何人都可以帮助我吗?

4

2 回答 2

2

以下答案试图解决问题

error LNK1104: cannot open file 'python27_d.lib'

_d后缀表示它正在搜索库的调试版本。Python 安装是发布版本,因此您无法将调试项目与其链接。

调试/发布

Debug 版本具有符号信息,通常未优化。此版本用于调试,其中零售版本是发布的版本。

如果您在调试模式下构建项目,它总是会尝试与调试库链接。为了克服这个问题

  1. 创建发布版本而不是调试。然后,您的项目将尝试链接python27.lib而不是python27_d.lib. 请参阅如何:创建发布版本
  2. 您还可以下载 Python 源代码并使用 VS2008 构建它(是的,Python 2.7 是使用 VS 2008 构建的)。同样,如果您的目标是 x64,则至少需要 VS2008 专业版。这将生成python27_d.lib. 请参阅Python 开发人员指南
于 2013-09-24T15:13:52.890 回答
1

包括:

  #include <python.h>

Boost没有包含python api......您需要使用python27.lib构建boost

于 2013-09-23T17:47:37.680 回答