NASM scanf未定义参考(LINUX)

时间:2015-11-15 19:08:45

标签: linux assembly nasm

我是装配新手。我的代码有问题。我正在尝试使用scanf创建简单的程序。

这是代码:

entityName

我用以下代码编译它:

query_words = set(list).intersection(query.split())
if query_words:
     ...

global main
extern printf
extern scanf

section .text

section .data
 message: db "The result is = %d", 10, 0
 request: db "Enter the number: ", 0
 integer1: times 4 db 0 ; 32-bits integer = 4 bytes
 formatin: db "%d", 0

main:
 ;  Ask for an integer
 push request
 call printf
 add esp, 4    ; remove the parameter

 push integer1 ; address of integer1, where the input is going to be stored
 push formatin ; arguments are right to left (first  parameter)
 call scanf
 add esp, 8    ; remove the parameters

 ; Move the value under the address integer1 to EAX
 mov eax, [integer1]

 ; Print out the content of eax register
 push rax
 push message
 call printf
 add esp, 8

 ;  Linux terminate the app
 MOV AL, 1
 MOV EBX, 0 
 INT 80h 

但是当我尝试ld时我得到错误:

nasm -f elf64 -o program.o program.asm

我正在使用64位Linux。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您没有使用ld命令链接任何库。 {C}库中定义了scanfprintf,因此您可以链接到:

ld -o program program.o -lc

或者您可以使用其他一些定义这些功能的库(如果有的话)。