2013-04-08 80 views
3

我想(用了幾天的時間)來構建一個由C++代碼生成的,帶有python的boost/python。我是來自德國的學生,主要與Java有關(我之前用C++寫過一些基本的OpenGL和gimp過濾器)。因此,請提前諒解我英語不好或C++初學者的錯誤。我的意思是,與C++相比,使用Java進行編程確實更加舒適。但足夠的衝突。boost 1.53蟒蛇致命錯誤LNK1104 boost_python-vc110-mt-gd-1_53.lib

錯誤:

LINK : fatal error LNK1104: File "boost_python-vc110-mt-gd-1_53.lib" could not be openend 

我的預設:

- 使用MS的Visual Studio 2012(11.0)

- 使用boost_1_53_0

- 使用python2.7(聽說3.3可能會導致一些問題)

我做了什麼:

安裝了python並將其添加到PATH。然後創建在VS一個新的空項目和一個類文件「Test.cpp的」與以下內容升壓教程頁面上描述:

char const* greet() 
{ 
    return "hello world"; 
} 

#include <boost/python.hpp> 

BOOST_PYTHON_MODULE(Test) 
{ 
    using namespace boost::python 
    def("greet", greet); 
} 

隨後而來的新的部分對我來說,在VS項目屬性:

配置屬性>常規> Configurationtype>動態庫(.dll)

C/C++>常規>加成Includedirectories> C:[..] \ boost_1_53_0

接頭>常規>附加庫目錄> C: [..] boost_1_53_0 \ stage \ lib

從錯誤我假設我做了鏈接器或包括錯誤。我還將鏈接器>常規>附加庫目錄更改爲boost_1_53_0 \ libs,因爲我不確定,但發生了同樣的錯誤。是的,我正確地包含了python。我也不確定是否必須在python旁邊添加其他內容到Linker> Input for boost。

然後我用bjam構建boost,除了msvc-11.0之外沒有任何選項,以確保擁有我需要的所有東西(雖然我讀過boost/python不需要額外的構建)並仍然出現相同的錯誤。有人能幫我嗎?我很想有一個一步一步的描述做什麼。我真的很失望。

btw:我和這個人在Linker error LNK1104 with 'libboost_filesystem-vc100-mt-s-1_49.lib'之前幾天有同樣的錯誤,於是我停止了對它的工作,當我重新開始時,我得到了全新的錯誤(我無法告訴你這是怎麼發生的)。

+0

檢查磁盤上如果有問題的庫(和libboost_filesystem-VC100-MT-S -1_49.lib')甚至生成。 – SChepurin 2013-04-08 14:57:27

+0

不,它不是。但我不知道我該如何得到它?我嘗試用bjam靜態和動態構建boost。沒有改變任何東西 – 2013-04-08 15:58:00

+0

簡單的方法是在Internet上搜索已建好的boost庫。與http://code.google.com/p/mataes/source/browse/Miranda/boost_1_49_0/lib/?r=1959一樣。下載並鏈接到該項目。 – SChepurin 2013-04-08 17:07:44

回答

0

請注意,我對你們的嘗試非常感謝,但沒有你的答案幫助一個同學而後給出提示對於我的正確答案和一些步驟非常簡單,其他我不明白,但它的工作原理現在。

第一個問題是:新的升壓1.53.0不適用於Python27或更舊版本。然後我將它與Python33聯繫起來,並刪除了構建錯誤。

但當然,構建版本沒有錯誤沒有工作。當我試圖啓動我的helloboost.py其從VisualStudio中內置的.pyd進口並調用迎接方法,出現下列錯誤:

ImportError: DLL load failed: The specified module could not be found. 

正如我與依賴學步車,瘋狂地複製檢查hello_ext.pyd我發現它需要在同一個文件夾中使用boost_python-vc110-mt-gd-1_53.dll(可能取決於你需要用bjam製作的內容)。當時它工作。也許有人可以解釋爲什麼無處解釋,我需要這個dll在與pyd相同的文件夾(或者我錯過了什麼嗎?是因爲我之前犯過一個錯誤?)

無論如何,我很高興它現在工作,並希望它可以幫助其他人。

+2

我不相信這是真的,提升python 1.53不適用於2.7。我已經在MSVC 10下完成了這個工作,至少是32位版本。 – jspencer 2014-05-14 19:51:46

3

您需要創建一個「user-config.jam」文件,指出Boost.Build可以找到python頭文件和庫文件的位置。從boost_1_53_0 /目錄下,你需要以建立丟失的庫調用B2這樣

# Configure specific Python version. 
using python : 2.7 
: C:/Python27/python.exe 
: C:/Python27/include #directory that contains pyconfig.h 
: C:/Python27/libs #directory that contains python27.lib 
: <toolset>msvc ; 

然後:您可以在boost_1_53_0 /目錄中包含以下內容創建

b2 toolset=msvc-11.0 --with-python variant=debug runtime-debugging=on link=shared --user-config=user-config.jam stage 

(雖然我會推薦b2 toolset=msvc-11.0 --with-python --user-config=user-config.jam --build-type=complete stage,這樣你就可以在一步之內獲得將來可能需要的所有配置)

一旦你有了庫,你需要將這些目錄添加到Visual Studio中(同時用於boost和python)。

成功構建模塊後,需要將其重命名爲Test.pyd(在BOOST_PYTHON_MODULE中使用的確切名稱。如果在PATH或當前目錄中有python和Boost.Python庫,則可以使用本教程中的腳本:。

import Test 
print Test.greet() 

,並得到了大家熟悉的「Hello World」的

4

因爲它正在尋找一個靜態庫,請添加BOOST_PYTHON_STATIC_LIB標誌,轉到VS屬性 - >預處理器 - >處理器定義,添加BOOST_PYTHON_STATIC_LIB標誌。

+0

在VS 2015中,Boost 1.61.0爲我工作過。 – 2017-04-26 16:32:13

0

你可能會迄今爲止已制定了這一點 - 但是:

當一個.exe文件查找一個.dll到沒有指定路徑加載。因此.dll必須位於文件的搜索路徑中。

另外:我試圖爲Visual Studio 2013構建1.49庫 - 並且不斷從我的項目中獲取LNK錯誤。我不知道是誰在stackoverflow上建議它,但有人\的東西給了我這個想法,從最近的提升中複製構建系統,知道如何使.libs爲更新的環境。 (謝謝)

我必須在1.58中運行引導後將boost build system從1.58拷貝,拷貝b2,bjam和boost-build.jam到更早的boost文件夾根目錄以替換那裏的相同命名文件。你也需要複製後面的tools \ build文件夾來支持構建系統。

注意到這裏,希望它可以幫助別人類似的cituation一樣,我發現自己在

參見:Search Path Used by Windows to Locate a DLL