2013-04-24 212 views
9

我试图运行用C Python模块++使用"#include <Python.h>",但是,设置后的“附加包含相关性”项目,以“\包括”调试运行时,我收到以下错误,为什么不#include <Python.h>工作?

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

我读我应该下载Python的开发版本,但是我没有找到它的链接,另外,我不需要将文件'python27_d.lib'复制到“libs”文件夹中吗?

请注意,我正在使用Python的Anaconda发行版。

在此先感谢!

+0

“C++运行Python模块”是什么意思?要做到这一点,你必须[嵌入Python解释器](http://docs.python.org/2/extending/embedding.html)。只是做'#包括'不会那样做。 – abarnert 2013-04-24 19:59:04

+1

同时,您是否阅读过[在Windows上构建C和C++扩展](http://docs.python.org/2/extending/windows.html)和[链接要求](http://docs.python.org/ 2/extends/embedding.html#linking-requirements)(用于嵌入)?你是否打算静态或动态地嵌入你的解释器?你在哪里得到你想要嵌入的翻译? – abarnert 2013-04-24 20:02:31

+0

从Python源代码构建Python库可能更容易。 – Aya 2013-04-24 20:03:55

回答

6

我对python了解不多,但是该消息表明python27_d.lib要么不存在,要么至少不存在链接器正在查找的地方。

您已经修复了编译器包含问题,现在使用Windows资源管理器找到python27_d.lib文件,并将该路径添加到附加库依赖关系路径中。它位于配置 - >链接器 - >常规 - >其他库目录下。

“_d”表示它是一个调试库,因此您需要那一个用于您的调试配置,而不需要“_d”(可能)用于您的发布配置。

+0

谢谢,那么如何获得调试库? – Curious 2013-04-24 20:10:30

+0

啊,对不起,我以为这只是一个VS问题。环顾它看来,版本(无“_d”)版本是分布式的,但不是“_d”。人们已经找到了一些方法来解决它在这里:http://stackoverflow.com/questions/11311877/creating-a-dll-from-a-wrapped-cpp-file-with-swig – 2013-04-24 20:18:13

+0

我试过解决方案“#define MS_NO_COREDLL“,它似乎工作感谢百万:),但我不明白为什么 – Curious 2013-04-24 20:44:43

0

我遇到了类似的错误,同时尝试使用Boost.Python的从C++访问蟒蛇Python包。让我首先说我对C++ Boost库的个人印象是,它们是一个带有不完整文档的好主意。 boost.org上有大量的文档,但似乎忽略了一些关键细节,作者认为这些细节过于微不足道,无法提及。但是,让我摆脱我的肥皂盒...

我希望[希望最终]能够理解如何让Boost.Python在我的系统上工作的持续动力是,有这么多伟大的Python科学软件包[ SymPy,Numpy,SciPy,matplotlib等]包含在Anaconda发行版中,如果从使用Qt Creator构建的C++项目访问它们真的很棒。 Boost文档似乎表明Boost.Python应该为我做到这一点。可惜的是,这些文件似乎离开了关键细节,作者似乎认为过于琐碎,打扰提...

无论如何,最初,我表明python.h找不到生成错误。我被加入这两个声明,我的Qt Creator的项目的.pro文件,分不清哪里升压安装了包括文件和QMAKE摆脱这种地方蟒蛇安装在我的系统上的文件python.h:

INCLUDEPATH += C:\boost_1_55_0 
INCLUDEPATH += C:\Anaconda\include 

之后,我得到一个LNK1104错误,指出找不到'python27.lib'。通过将这两个语句添加到我的.pro文件中,我摆脱了这一点。第一个告诉qmake在哪里可以找到Anaconda的python27.lib文件。第二个告诉qmake在哪里找到提升。python binary:

LIBS += "C:/Anaconda/libs" 
LIBS += "C:/boost_1_55_0/stage/lib/libboost_python-vc110-mt-gd-1_55.lib" 

但是,就目前为止我已经得到了。我现在收到一个错误,指出它无法打开我尚未找到修复程序的文件'C:/Anaconda/libs.obj'。当然,错误是由该文件不存在引起的。面临的挑战是要发现为什么要寻找它并在哪里找到它。

3

将视觉工作室置于发布模式而不是调试。

+0

这真的是这个答案结合上面的那个解决了我的问题。所以这些步骤是:(1)设置为释放模式,而不是调试,(2)将链接器设置为指向我的Python路径。 – rrs 2015-07-21 22:29:55

19

我通常通过在调试版本中使用非调试Python库来规避这种情况。通常,这会导致如下代码:

#ifdef _DEBUG 
    #undef _DEBUG 
    #include <Python.h> 
    #define _DEBUG 
#else 
    #include <Python.h> 
#endif 

其中在包含Python.h期间隐藏_DEBUG的定义。

+1

DOH!这是解决方案!只要确保您的调试版本与python27.lib而不是python27_d.lib链接。 – 2016-02-20 20:24:55