我需要在使用 MinGW 的 Eclipse CDT 中的项目中使用第三方 .lib / .dll 文件(可能在 Visual Studio 中编译)。
我可以成功地与 32 位版本(使用 32 位 MinGW)动态链接,但不能与 64 位版本(使用 64 位 MinGW)动态链接。当我运行 64 位版本时,它在调用第三方函数时崩溃。
为了让 64 位工作,我需要做些什么不同的事情吗?
谢谢,艾伦
我需要在使用 MinGW 的 Eclipse CDT 中的项目中使用第三方 .lib / .dll 文件(可能在 Visual Studio 中编译)。
我可以成功地与 32 位版本(使用 32 位 MinGW)动态链接,但不能与 64 位版本(使用 64 位 MinGW)动态链接。当我运行 64 位版本时,它在调用第三方函数时崩溃。
为了让 64 位工作,我需要做些什么不同的事情吗?
谢谢,艾伦
我的解决方案是针对 32 位构建的 32 位.lib文件和 64 位构建的 64 位.dll文件链接。
我仍然不确定不一致来自哪里,所以欢迎任何评论。
艾伦
如果与 GCC (MinGW) 相比,Microsoft Visual Studio 使用一组不同的 ABI。
完成这项工作并不容易,许多项目和库为 Windows 提供了 2 个版本的库来解决这个问题,一个用于 MSVS,一个用于 MinGW。
C++ ABI 不同,但有一个与 C 语言通用的 ABI 集,一个技巧在于使用extern C
关键字并尝试以C 方式使用 C++ 代码并将其链接为 C 代码。
您的问题的答案是否定的,您可以尝试一些技巧,但没有标准的 ABI 并且不能保证使其工作。
无论哪种方式,您都需要访问库的源代码以至少尝试某些操作或使用 MinGW 重新编译库,您还可以尝试向可能不知道 Windows 下此问题的开发人员发送电子邮件并要求提供这个库的不同版本。如果没有 Visual Studio,你现在拥有的东西将毫无用处。