【问题标题】:File format not recognized when trying build an exe from obj in windows尝试在 Windows 中从 obj 构建 exe 时无法识别文件格式
【发布时间】:2021-09-25 03:10:45
【问题描述】:

我试图从 asm 文件构建一个 exe。 asm 文件如下所示:

global main
extern puts

section .data

msg:
    db "Hello, world!",10,0

section .text

main:
    sub     rsp, 28h
    mov     rcx, msg
    call    puts
    add     rsp, 28h
    ret

然后我使用 NASM 组装它并尝试使用 GCC 链接它。但它显示了这个错误。

> nasm -fwin64 asmtest.asm
> gcc asmtest.obj
asmtest.obj: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status

我无法弄清楚发生了什么。我的 NASM 版本 2.14.02 和 GCC 版本 8.1.0。我遵循了this 教程(在底部)。我在我的 Windows 10 64 位机器上执行此操作。

我也看过this的问题,但对我没有帮助。

【问题讨论】:

  • "asmtest.obj" 是有效的 COFF 格式,但 gcc 可能需要 ELF,请尝试使用 --format 参数指定它。你不应该把你的目标文件和一些库文件链接起来吗?
  • @vitsoft 无法识别 GCC 的命令行选项 --format
  • 您使用哪个 gcc 工具链?确保这是 64 位工具链。
  • @fuz 哦,对不起。那确实是错误。感谢thisthis 的回答。
  • @SouravKannanthaB 例如,工具链的完整名称是什么以及您在哪里获得它。我不知道这对你的案子来说是什么名字。阅读您的问题,您有一些随机版本和变体的 mingw32 工具链。而且您只告诉我们该工具链中的 gcc 版本是什么,而不是 mingw 的版本或变体。

标签: windows assembly gcc nasm mingw32


【解决方案1】:

您已经为 32 位二进制文​​件安装了 mingw。您需要安装配置为生成 64 位二进制文​​件的 mingw 版本来编译和/或链接 64 位二进制文​​件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多