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

标签 c static-libraries cpu-architecture gmp dumpbin

我不明白为什么在 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 所报告的。

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

最佳答案

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

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

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

只要您不使用在其中一个 64 位目标文件中找到的任何工具,您的程序就会正确链接到 32 位应用程序,这解释了 CFF 的输出。

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

关于c - dumpbin 报告静态库的错误目标架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28635707/

相关文章:

c - 为什么函数原型(prototype)后需要使用分号

c++ - 检查打印机是否存在的程序

c - 在源代码级别使用 GCC __builtin_object_size 是否有任何动机?

Python C API 不加载模块

c++ - 使用 Visual Studio 2019 和 cmake for x86 编译 pe-parse 库

assembly - RISC-V SiFive HiFive Unleashed FMADD(32) 下溢标志未在次正常结果上设置

x86 - 陷阱和中断有什么区别?

python - 我可以同时运行两个单独的 jupyter notebook 文件,而不会在单 CPU 计算机上减速吗?

gcc - 从静态库中提取gcc版本信息

gcc - "Undefined reference "到静态库中定义的函数