在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
包含section .text
的文件的 main
同时包含extern get_int
和global get_int
我正在使用一个电话并返回main
中的子程序。
我还会指出我在32位ubuntu linux上的vm上运行它。
答案 0 :(得分:0)
引用NASM manual:
GLOBAL
是EXTERN
的另一端:如果一个模块将符号声明为EXTERN
并引用它,那么为了防止链接器错误,其他一些模块必须实际定义符号并将其声明为GLOBAL
。
因此,如果在get_int.asm中定义了get_int
,则应将global get_int
放在get_int.asm中,并在任何其他想要使用{{1}的文件中将其声明为extern
}}