关于linux ubuntu 16 32bit,DrPaulcarter汇编语言教程,未定义引用错误

时间:2017-07-06 19:49:16

标签: linux assembly x86 nasm

我是汇编语言的新手,所以我正在关注保罗·卡特博士的pcasm教程( http://pacman128.github.io/pcasm/ )。

完全是pdf文件(http://pacman128.github.io/static/pcasm-book.pdf)第33页和书籍第23页

从该网站,我下载了Linux示例(http://pacman128.github.io/static/linux-ex.zip

并在终端输入

  1. nasm -f coff first.asm
  2. gcc -c driver.c
  3. nasm -f coff asm_io.o
  4. gcc -o first driver.o first.o asm_io.o
  5. 但它返回了它

    enter image description here

    问题在哪里?

    (截图的命令-lc是没关系的,如果没有-lc,它返回相同的东西)

2 个答案:

答案 0 :(得分:1)

我发现错误来自asm_io.asm。您必须修改asm_io.asm或检查paths_to_files <- c("./path/to/this.RData", "./another/path/to/that.RData") tools::file_path_sans_ext( basename( paths_to_files ) ) ## Returns: ## [1] "this" "that" 行。

答案 1 :(得分:1)

对于Linux asm_io不适用于64位。您必须创建32位程序。使用-m32选项将 C 文件编译为32位。您还必须使用特殊定义asm_io.asm汇编-d ELF_TYPE,以便在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