【发布时间】: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 位工具链。
-
@SouravKannanthaB 例如,工具链的完整名称是什么以及您在哪里获得它。我不知道这对你的案子来说是什么名字。阅读您的问题,您有一些随机版本和变体的 mingw32 工具链。而且您只告诉我们该工具链中的 gcc 版本是什么,而不是 mingw 的版本或变体。
标签: windows assembly gcc nasm mingw32