使用 NASM 和 mingw 命令时出现编译错误
我想玩一下汇编。首先,我创建了一个小asm脚本并尝试编译它。第一步一切都很顺利:
nasm -felf64 hello.asm
但是当我尝试使用
ld -o hello.o 你好
从 MinGW 发生错误:
hello.o:文件无法识别:文件格式无法识别
我可以做什么来解决这个问题?我也用 gcc 尝试过,但随后出现了相同的错误以及另一个错误。
I want to play a bit with assembly. To get started I've created a little asm script and tried to compile it. In the first step everything went great:
nasm -felf64 hello.asm
But when I tried to use
ld -o hello.o hello
from MinGW an error occured:
hello.o: file not recognized: File format not recognized
What can I do to fix this problem? I've tried it with gcc as well but then the same error plus one other error occurs.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
MinGW 创建针对 Windows 的二进制文件。 Windows 不支持 ELF 二进制文件(或者 Linux 的 Windows 子系统支持吗?)。无论如何,MinGW 中的 ld 会期望您提供 win64 格式的二进制文件,而不是 elf64 格式的二进制文件。
nasm -fwin64 hello.asm
很可能会起作用。不,它不会工作,因为我刚刚看到你的代码,并且你在 Windows 下使用 Linux 系统调用。
请写下来
,而不是发表评论。
如果不起作用,
MinGW creates binaries targeting Windows. Windows does not support ELF binaries (or does it? with Windows subsystem for Linux?). Anyway,
ld
in MinGW will expect that you provide binaries inwin64
format notelf64
.nasm -fwin64 hello.asm
will most likely work.No it won't work because I just saw your code, and you are using Linux syscalls under Windows.
Write,
instead of,
Leave a comment if it doesn't work.