nasm gcc 命令错误,子程序作为单独的文件

nasm gcc command error with subprogram as seperate file

在 nasm 中将子程序作为外部文件进行测试。 运行宁之后:

nasm -f elf subprogram2.asm
nasm -f elf get_int.asm

我然后运行 gcc:

gcc subprogram2.o get_int.o -o stuff.exe

然后我收到以下错误:

subprogram2.o: In function 'main':
subprogram2.asm:(.text+0x19): undefined reference to 'get_int'
subprogram2.asm:(.text+0x3d): undefined reference to 'get_int'
collect2: error: ld returned 1 exit status
包含 main 的文件的

section .text 同时具有 extern get_intglobal get_int

我正在为我的 main 中的子程序使用调用和 return。 我还要指出,我 运行 在 32 位 ubuntu linux 上的虚拟机上执行此操作。

引自NASM manual

GLOBAL is the other end of EXTERN: if one module declares a symbol as EXTERN and refers to it, then in order to prevent linker errors, some other module must actually define the symbol and declare it as GLOBAL.

因此,如果 get_int 定义在 get_int.asm 中,您应该将 global get_int 放在 get_int.asm 中,并在任何其他文件中将其声明为 extern想使用 get_int.