2015-04-12 154 views
1

我是比較新的C++,我主要用於在Visual Studio 2013環境下工作。我需要在一個項目中使用這個庫,我的工作: https://github.com/s3rvac/cpp-bencoding克++鏈接的靜態庫錯誤

我的第一個問題是:它的問題,如果我建立在Visual Studio或GCC(MinGW的-W64)的圖書館嗎?

無論如何,我建立了它使用GCC(4.9.2),因爲筆者在他的GitHub上的指示這樣做的。我沒有錯誤,我製作了一個名爲的庫libbencoding.a

現在我想將這個lib文件鏈接到我自己的項目。這是我被卡住了。所以我創建了一個簡單的hello世界程序(main.cpp)。 libbencoding.a的位置是在文件夾C:\ ... \ CPP-bencoding \ build中的\ src

g++ main.cpp -L "C:\...\cpp-bencoding\build\src" -l libbencoding -o foo.exe -std=c++11 

然而,這產生錯誤信息:

C:/Program Files (x86)/mingw-w64/i686-4.9.2-posix-dwarf-rt_v4-rev2/mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot 
find -llibbencoding 
collect2.exe: error: ld returned 1 exit status 

我真的在這裏感謝一些幫助。

在此先感謝!

+5

'-lencoding',不'lib' – Mat

+4

'其實-lbencoding'。 – immibis

+3

如果我錯了,那麼人們會糾正我,但是對於你的問題,如果它對圖書館編譯的編譯器有影響,是的。因爲C++沒有一個穩定和標準的ABI,例如如果你的庫的源代碼用方法欄定義了類Foo,g ++可能會把名稱class__foo__method__bar放在庫二進制文件中,而當進行鏈接時,可能編譯器會查找method__bar__of__class__foo –

回答

1

如果你的項目編譯和使用Visual Studio 2013鏈接,你項目可以有編譯和鏈接錯誤MinGW的,因爲他們執行一套不同的C++標準,或者您使用非標準的語言功能。

作爲allan.simon提到,由於缺乏標準的ABI(只有在使用C編譯器時纔可能),所以不能在Visual Studio編譯的程序中使用.a庫,反之亦然。

項目CPP-bencoding使用CMake的,所以你可以嘗試使用Visual Studio編譯它。

還有一件事,當你使用MinGW的,庫的順序關係。您可以使用Visual Studio編譯帶選項-lmylib1 -lmylib2 -lmylib3的項目,但MinGW可以爲您提供鏈接錯誤(未定義的引用)。

你可以找到詳細here

+0

感謝您的答案。是的,的確,我用Cmake生成了一個VS2013項目,並且我沒有任何錯誤地編譯它。但是,我無法將生成的bencoding.lib文件鏈接到我的其他Visual Studio項目。 – DoubleTrouble

+1

@DoubleTrouble,嘗試在使用本碼編碼的源代碼中使用#pragma註釋(lib,「C:\ Path \ to \ lib \ bencoding.lib」)。指定.lib文件的完整路徑(僅用於測試)。 – gomons

+0

在我切換到GCC之前,我確實嘗試過,但沒有成功。我不是很有信心,它應該工作,但現在我可以給它一個嘗試 – DoubleTrouble