Linux 如何将readline库链接到对象文件?
我试图在用FASM编写的程序中使用GNU readline库。这是我的汇编代码:Linux 如何将readline库链接到对象文件?,linux,assembly,x86,readline,fasm,Linux,Assembly,X86,Readline,Fasm,我试图在用FASM编写的程序中使用GNU readline库。这是我的汇编代码: format elf64 public _start extrn readline section ".text" executable _start: push prompt call readline jmp _start section ".data" prompt db ">> ", 0 然后我编译并链接它,如下所示: $ fasm test.asm
format elf64
public _start
extrn readline
section ".text" executable
_start:
push prompt
call readline
jmp _start
section ".data"
prompt db ">> ", 0
然后我编译并链接它,如下所示:
$ fasm test.asm
$ ld -lreadline test.o -o test
但是,当我尝试执行/test
时,bash会给出以下错误消息:
bash: ./test: No such file or directory
目录中存在
测试
可执行文件。发生了什么?我没有正确链接libreadline
库吗?当我在64位系统上编译32位代码时,有一次发生了这种情况。您必须安装一些额外的32位开发工具和库(如适当的libc变体),以便32位二进制文件也可以被识别为可执行文件。我正在使用Ubuntu 13.04。你认为我需要安装哪些软件包?@AaditMShah好吧,我一时想不起来,我上次使用Ubuntu已经很久了。我已经在32位代码中看到了这一点<默认情况下,code>ld尝试使用/lib/ld linux.so.1
作为解释器/动态链接器。。。不存在(在我的系统上)。(您可以在文件的纯文本转储中看到这一点)解决方案是ld-I/lib/ld linux.so.2…
(--dynamic linker
是-I
的别名,如果您喜欢更多类型的话)。系统上的位置可能不同,但我认为这就是您遇到的问题。令人困惑,不是吗?可能需要指定-l readline
(也可能需要指定libreadline的l路径)