dumpbin 报告静态库的错误目标架构

dumpbin reporting wrong target architecture for a static library

我不明白为什么 dumpbin 在 Visual Studio 命令行上执行以下命令时返回 x64:

dumpbin libgmp.lib /HEADERS |more

这是在Cygwin 32位版本下编译的GMP库,编译配置如下:

./configure --host=i386 ABI=32

构建系统为指定主机成功编译并构建了所有文件。然而,dumpbin 仍然报告 .a 或 .lib 适用于 64 位架构。

请注意,输出静态库是 libgmp.a,但我将其扩展名更改为 .lib 并将其与我的 Visual Studio 项目链接,没有任何问题。

另一个重要提示:链接 libgmp.lib 与 32 位程序没问题,并生成 PE32 文件,如 CFF Explorer 所报告。

这是一个 dumpbin 解释错误,还是我漏掉了一些重要的东西?

似乎没有 64bit32bit 静态库类型。使用 objdumpdumpbin 对库执行一些断言后,两者都报告了正确的信息。

objdump 报告 一些 的目标文件是 64 位的,其他的是 32 位的。 dumpbin 做了同样的事情。

问题出自GMP构建系统;它将 64 位和 32 位目标文件嵌入到静态库中。

只要您不使用在 64 位目标文件之一中找到的任何工具,您的程序将 link 正确地运行到 32 位应用程序,这解释了 CFF 的输出。

要解决此问题,您必须联系 GMP 网站。