2014-02-11 194 views
2

我試圖按照this教程Python嵌入到C++應用程序,和我從打一個路障權開始。讓我帶你通過它...Boost.Python的和錯誤LNK1104:無法打開文件「boost_python-VC100-MT-GD-1_55.lib」

  1. 我提取Boost庫到C:\ codelibraries \ C++ \ boost_1_55_0
  2. 我創造的VC+++一個新的項目,並創建一個 'test1.cpp' 文件它用下面的代碼:

    #include <boost/python.hpp> 
    
    int main(int, char**) { 
    Py_Initialize(); 
    
    Py_Finalize(); 
    return 0; 
    } 
    
  3. 我然後把我的VC++目錄下面的目錄>包含目錄:
    • C:\ codelibraries \ C++ \ boost_1_55_0
    • C:\ codelibraries \ C++ \ boost_1_55_0 \提升\ python的
    • C:\ Python27 \包括
  4. 在我的VC++目錄>庫目錄:
    • C:\ codelibraries \ C++ \ boost_1_55_0
    • C:\ codelibraries \ C++ \ boost_1_55_0 \庫
    • C:\ Python27 \庫
  5. 在我的VC++目錄>源目錄:
    • C:\ Python27 \包括
    • C:\ codelibraries \ C++ \ boost_1_55_0

添加這些並運行它之後,我給出錯誤LNK1104:無法打開文件「boost_python- vc100-mt-gd-1_55.lib'

好的,事實證明,我需要實際上install增強庫。精細。我這樣做。它會創建新文件夾'.. \ boost_1_55_0 \ stage \ lib'。裏面有一個庫文件叫做libboost_python-vc100-mt-gd-1_55.lib和另一個非常相似但排除'gd'部分的庫文件。

在'Linker'>'General'>'Additional Library Directories'下,我添加了C:\ codelibraries \ C++ \ boost_1_55_0 \ stage \ lib。我再次運行它。仍然會給出相同的鏈接器錯誤LNK1104:無法打開文件'boost_python-vc100-mt-gd-1_55.lib'。我進入'stage \ lib'文件夾,看到沒有boost_python-vc100-mt-gd-1_55.lib,只有* lib * boost_python-vc100-mt-gd-1_55.lib。

我重新命名libboost_python-VC100-MT-GD-1_55.libboost_python-VC100-MT-GD-1_55.lib並重新構建。

成功,但給了我其他的鏈接錯誤:

error LNK1120: 3 unresolved externals 
error LNK2001: unresolved external symbol __imp___Py_NoneStruct 
error LNK2019: unresolved external symbol __imp__Py_Finalize referenced in function _main 
error LNK2019: unresolved external symbol __imp__Py_Initialize referenced in function _main 

而現在我被卡住,這裏來了。我寫的代碼中有幾行是不正確的?這與我使用64位機器有什麼關係?我的包含不正確?如果可以的話請幫忙。任何信息非常感謝,謝謝。

+1

您需要安裝Python並將其標題和庫位置添加到VC搜索路徑。但是你的設置有些奇怪的事情發生。 * lib *前綴被添加到庫名稱的自動添加,所以你不應該做任何重命名。嘗試打開''並追溯到所在的位置,並查看是否可以找出自動鏈接名稱錯誤的原因。 – Praetorian

+0

您還需要鏈接到python虛擬機的導​​入庫。 – sehe

+0

@Praetorian我在'Include Directories'中也有'C:\ Python \ include'頭文件夾。我不知道如何追溯並找出整個自動鏈接問題,但我會說我也嘗試在'.. \ libs \ python \ build \ ..'深處的Python示例文件夾中運行bjam.exe。 Boost.Build也在尋找沒有'lib'前綴的python庫。我的'stage \ lib'文件夾中的所有內容都已經附加了'lib'前綴... – akappel

回答

4

我回到這個問題,因爲我不想讓它沒有答案。事實證明,這個問題試圖在32位版本的boost庫中使用Python的64位實現。切換到32位Python之後,事情變得更容易了。如果你不需要使用64位的Python,我會推薦它。

1

就我而言,在stage/lib中只有.lib文件以libboost *開頭,而不是boost *。所以我必須去下載http://boost.teeks99.com/的二進制文件,它們包含所有libboost * .lib,boost * .lib和boost * .dll版本,並將boost * .lib和boost * .dll添加到stage \ lib庫中上班。

相關問題