我不明白为什么在 Visual Studio 命令行上执行以下命令时 dumpbin 返回 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 所报告的。
这是转储解释错误,还是我漏掉了一些重要的东西?
最佳答案
似乎没有64bit
或32bit
静态库类型。使用 objdump
和 dumpbin
对库执行一些断言后,两者都报告了正确的信息。
objdump
报告一些目标文件是 64 位的,而其他的是 32 位的。
dumpbin
做了同样的事情。
问题从GMP构建系统中冒出来;它将 64 位和 32 位目标文件嵌入到静态库中。
只要您不使用在其中一个 64 位目标文件中找到的任何工具,您的程序就会正确链接到 32 位应用程序,这解释了 CFF 的输出。
要解决此问题,您必须联系 GMP 网站。
关于c - dumpbin 报告静态库的错误目标架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28635707/