2012-08-28 81 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库。 –

相关问题