2012-08-28 79 views
3

我需要使用MinGW在Eclipse CDT中使用第三方.lib/.dll文件(可能在Visual Studio中編譯)。爲什麼我不能鏈接MinGW中的64位.lib文件?

我可以與32位版本(使用32位MinGW)成功動態鏈接,但不能與64位版本(使用64位MinGW)鏈接。當我運行64位版本時,它在調用第三方函數時崩潰。

有什麼不同,我需要做的64位工作?

謝謝,如果比GCC(MinGW的) 艾倫

回答

2

爲我的解決方案是針對32位構建和64位的.dll文件 64位構建抵靠32位的.lib文件鏈接。

我仍然不確定不一致性來自哪裏,因此歡迎任何評論。

艾倫

+0

64位.lib文件格式與GCC/binutils使用的64位.a庫存檔格式不同。總之:32位作品,64位不。原因與其他原因相同:「爲什麼這不起作用?」 - 問題:它沒有成功。 – rubenvb

+0

@rubenvb我認爲OP可以鏈接到32位'.lib'文件的原因是它實際上是一個* import *庫,而不是一個靜態庫。你會同意嗎?在Windows上,'.lib'有時候只不過是在編譯過程中從'.dll'中爲符號解析生成的一個庫(它本質上是一個存根)。我相信MinGW的GCC binutils'ld'的端口可以解析'.lib'導入庫 - 儘管我不知道在哪裏可以找到明確的證據...... –

0

的Microsoft Visual Studio使用一組不同的ABI的。

要做到這一點並不容易,許多項目和圖書館都提供了2個版本的Windows版本庫來解決這個問題,一個用於MSVS,一個用於MinGW。

的C++ ABI是不同的,但有一個共同的ABI組與C語言,一招在於使用extern C關鍵字,並嘗試使用C++代碼的ç方式並將其鏈接爲C代碼。

你的問題的答案是否定的,你可以嘗試一些技巧,但沒有標準的ABI這個,也沒有保證使這項工作。

無論哪種方式,您需要訪問您的庫的源代碼,至少嘗試一些東西或用MinGW重新編譯庫,您還可以嘗試發送一封電子郵件給開發人員,他可能不知道Windows下的這個問題並要求該庫的不同版本。沒有Visual Studio,你現在所擁有的是無用的。

+0

我已經通過電子郵件發送了開發者,但我還是設法得到它的工作,當我拿着的.lib文件的方程爲64位構建...鏈接到的.dll文件爲我工作。這是正常的嗎? –

+0

該庫的編寫語言是?也許這只是C. – user827992

+0

這是一個C庫。 –

相關問題