如何在Boost.Python中解决__imp___Py_NoneStruct错误?

时间:2013-09-23 15:55:46

标签: c++ python boost-python unresolved-external

我正在尝试将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

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

    1. C:\local\boost_1_54\; C:\Python27\include;添加到C / C ++ - > General->其他包含目录。

    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 ++ - >预编译标题 - >预编译标题。

    4. 我创建了一个空项目,源代码非常简单,如下所示(我实际上尝试运行一个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'

      任何人都可以帮助我?

2 个答案:

答案 0 :(得分:2)

以下答案试图解决问题

error LNK1104: cannot open file 'python27_d.lib'

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

<强>调试/发布

Debug版本具有符号信息,通常不进行优化。此版本用于调试零售版本是已发布的版本。

如果您在调试模式下构建项目,它将始终尝试链接调试库。要克服这个问题

  1. 创建发布版本而不是Debug。然后,您的项目会尝试与python27.lib而不是python27_d.lib相关联。请参阅How to: Create a Release Build
  2. 您还可以下载Python源代码并使用VS2008构建它(是的,Python 2.7是使用VS 2008构建的)。再次,如果您的目标是x64,则至少需要VS2008专业版。这将生成python27_d.lib。请参阅Python Developer’s Guide

答案 1 :(得分:1)

包括:

  #include <python.h>

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