【问题标题】:Why can't I link 64-bit .lib file in MinGW?为什么我不能在 MinGW 中链接 64 位 .lib 文件?
【发布时间】:2012-08-22 18:05:38
【问题描述】:

我需要在 Eclipse CDT 中使用 MinGW 的项目中使用第三方 .lib / .dll 文件(可能在 Visual Studio 中编译)。

我可以成功地与 32 位版本(使用 32 位 MinGW)动态链接,但不能与 64 位版本(使用 64 位 MinGW)动态链接。运行64位版本,调用第三方函数时崩溃。

为了让 64 位工作,我需要做些什么不同的事情吗?

谢谢, 艾伦

【问题讨论】:

    标签: c++ eclipse visual-studio mingw eclipse-cdt


    【解决方案1】:

    对我来说,解决方案是针对 32 位构建的 32 位 .lib 文件和 64 位构建的 64 位 .dll 文件链接.

    我仍然不确定不一致来自哪里,所以欢迎任何 cmet。

    艾伦

    【讨论】:

    • 64 位 .lib 文件格式与 GCC/binutils 使用的 64 位 .a 库归档格式不同。简而言之:32 位有效,64 位无效。原因与其他任何原因相同:“为什么这不起作用?”-问题:它没有起作用。
    • @rubenvb 我认为 OP 可以链接到 32 位 .lib 文件的原因是因为它实际上是一个 import 库,而不是静态库。你会同意吗?在 Windows 上,.lib 有时只不过是从.dll 生成的库,用于在编译期间进行符号解析(它本质上是一个存根)。我相信 GCC binutils 的 MinGW 端口 ld 可以解析 .lib 导入库 - 虽然我不知道在哪里可以找到明确的证据......
    【解决方案2】:

    与 GCC (MinGW) 相比,Microsoft Visual Studio 使用不同的 ABI 集。

    要做到这一点并不容易,许多项目和库提供了 2 个 Windows 版本的库来解决这个问题,一个用于 MSVS,一个用于 MinGW。

    C++ ABI 是不同的,但有一个与 C 语言共同的 ABI 集,一个技巧在于使用 extern C 关键字并尝试以 C 方式使用 C++ 代码并链接它作为 C 代码。

    您的问题的答案是否定的,您可以尝试一些技巧,但没有标准的 ABI 用于此,也不能保证使其正常工作。

    无论您需要访问库的源代码以至少尝试某些方法或使用 MinGW 重新编译库,您也可以尝试向可能不知道 Windows 下此问题的开发人员发送电子邮件和要求这个库的不同版本。如果没有 Visual Studio,你现在拥有的东西将毫无用处。

    【讨论】:

    • 我已向开发人员发送了电子邮件,但当我将 .lib 文件从 64 位构建的等式中取出时,我确实设法让它工作......链接到 .dll 对我有用。这正常吗?
    • 这个库是用什么语言编写的?也许只是 C。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2017-07-24
    • 2021-06-25
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多