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_int
和 global 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
.
在 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_int
和 global get_int
我正在为我的 main
中的子程序使用调用和 return。
我还要指出,我 运行 在 32 位 ubuntu linux 上的虚拟机上执行此操作。
引自NASM manual:
GLOBAL
is the other end ofEXTERN
: if one module declares a symbol asEXTERN
and refers to it, then in order to prevent linker errors, some other module must actually define the symbol and declare it asGLOBAL
.
因此,如果 get_int
定义在 get_int.asm 中,您应该将 global get_int
放在 get_int.asm 中,并在任何其他文件中将其声明为 extern
想使用 get_int
.