2013-04-24 199 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