assembly - GNU 链接器 : file not recognized

标签 assembly makefile nasm

这是我的 makefile:

obj =init3.o initfunc.o descriptor.o disk.o

init:$(obj)
     ld -o init.out $(obj)

init3.o:init3.asm
        nasm -f aout init3.asm

initfunc.o:initfunc.asm
        nasm -f aout  initfunc.asm

descriptor.o:../lib/descriptor.asm
    nasm -f aout  ../lib/descriptor.asm

disk.o:../drive/disk.asm
    nasm -f aout  ../drive/disk.asm

他们编译完全没有错误,但是当链接器开始链接时,出现错误:文件无法识别:文件格式无法识别。 然后我使用 -f elf 将每个文件更改为 elf 格式,错误仍然存​​在,我在谷歌上搜索到 GUN 链接器确实可以识别 .out 格式,那么有什么问题吗我的代码?

最佳答案

FWIW:在重新运行 make 之前删除您的 .o 文件。调整编译器标志后很容易忘记这一点。 (我是根据经验谈论的...)

说明:调整 makefile不会强制重新编译(除非您将 makefile 本身指定为 makefile 中每个规则的依赖项>makefile;这甚至可能不是一个坏主意)。您很可能一遍又一遍地链接相同的旧目标文件。

关于assembly - GNU 链接器 : file not recognized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635470/

相关文章:

assembly - 使用 nasm 将 64 位指令组装成原始机器码

assembly - i386 实模式 - 从软盘加载

assembly - 如何将 NASM "push byte"转换为 GAS 语法?

c - MOV指令如何使用物理地址?

c - 初学者的 Makefile

c++ - 如何在 CMake 中设置编译标志?

Mercurial - 如何停止跟踪修改的文件但将第一个版本保留在存储库中

ubuntu - 在 Ubuntu 上离线安装 NASM 的步骤?

C/Assembler - 在没有堆栈的单用户、单任务操作系统中返回代码

c++ - < 比 <= 快吗?