在linux ubuntu 16 32位汇编语言教程上,未定义的引用错误

在linux ubuntu 16 32位汇编语言教程上,未定义的引用错误,linux,gcc,assembly,x86,nasm,Linux,Gcc,Assembly,X86,Nasm,我是汇编语言新手,所以我正在学习Paul Carter博士的pcasm教程( ) 正是pdf文件()第33页和本书的第23页 我从那个网站下载了Linux示例() 在终端我输入 nasm-f coff first.asm gcc-c驱动程序.c nasm-f coff asm\u io.o gcc-o第一个驱动程序.o第一个.o asm\u io.o 但它还是退回了 问题在哪里 (屏幕截图的命令-lc无关紧要,如果没有-lc,则返回相同的内容)我发现错误来自asm\u io.asm。您必须修改

我是汇编语言新手,所以我正在学习Paul Carter博士的pcasm教程( )

正是pdf文件()第33页和本书的第23页

我从那个网站下载了Linux示例()

在终端我输入

  • nasm-f coff first.asm
  • gcc-c驱动程序.c
  • nasm-f coff asm\u io.o
  • gcc-o第一个驱动程序.o第一个.o asm\u io.o
  • 但它还是退回了

    问题在哪里


    (屏幕截图的命令-lc无关紧要,如果没有-lc,则返回相同的内容)

    我发现错误来自asm\u io.asm。您必须修改asm_io.asm或检查
    定义
    行。

    我发现错误来自asm_io.asm。您必须修改asm_io.asm或检查
    定义
    行。

    对于Linux
    asm_io
    不能使用64位。您必须创建32位程序。使用
    -m32
    选项将C文件编译为32位。您还必须使用特殊的define
    -d ELF\u TYPE来组装
    asm\u io.asm
    ,这样才能在Linux上工作。不要使用
    coff
    。这样的命令应该可以工作:

    nasm -f elf -d ELF_TYPE asm_io.asm
    nasm -f elf first.asm 
    gcc -m32 -c driver.c
    gcc -m32 -o first driver.o first.o asm_io.o
    

    如果您真的在32位Linux上,您将能够省略
    -m32

    ,因为Linux
    asm_io
    不能使用64位。您必须创建32位程序。使用
    -m32
    选项将C文件编译为32位。您还必须使用特殊的define
    -d ELF\u TYPE来组装
    asm\u io.asm
    ,这样才能在Linux上工作。不要使用
    coff
    。这样的命令应该可以工作:

    nasm -f elf -d ELF_TYPE asm_io.asm
    nasm -f elf first.asm 
    gcc -m32 -c driver.c
    gcc -m32 -o first driver.o first.o asm_io.o
    

    如果你真的是在32位Linux上,你将能够省略
    -m32

    Linux使用ELF(
    nasm-f elf32
    )而不是coff,我很惊讶它居然能工作。此外,我们不使用前导下划线,所以请删除它们。此外,
    nasm-f coff asm_io.o
    当然应该是
    asm_io.asm
    而不是
    .o
    (复制粘贴错误?@Jester感谢asm_io.asm是我的错,我会尝试你的建议使用剪切粘贴来包含命令的输出,而不是屏幕截图。我认为是时候找到另一个教程了……正如你链接到的文本所说:“本教程中的示例仅适用于DJGPP”。DJGPP是一个DOS编译器。Linux使用ELF(
    nasm-f elf32
    )而不是coff,我感到惊讶的是,它甚至可以工作。此外,我们不使用前导下划线,所以请删除它们。此外,
    nasm-f coff asm_io.o
    当然应该是
    asm_io.asm
    而不是
    .o
    (复制粘贴错误?@Jester谢谢asm_io.asm是我的错,我会尝试你的建议使用剪切粘贴来包含命令的输出,而不是屏幕截图。我想是时候找到另一个教程了……正如你链接到的文本所说:“教程文本中的示例仅适用于DJGPP”。DJGPP是DOS编译器。