【问题标题】:How to link the readline library to an object file?如何将 readline 库链接到目标文件?
【发布时间】:2013-06-09 06:00:49
【问题描述】:

我正在尝试在一个用 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
$ ld -lreadline test.o -o test

但是,当我尝试执行 ./test bash 时,会出现以下错误消息:

bash: ./test: No such file or directory

test 可执行文件存在于目录中。怎么了?我没有正确链接libreadline 库吗?

【问题讨论】:

    标签: linux assembly x86 readline fasm


    【解决方案1】:

    当我在 64 位系统上为 32 位编译代码时,曾经发生过这种情况。您必须安装一些额外的 32 位开发工具和库(如适当的 libc 变体),以便也可以将 32 位二进制文​​件识别为可执行文件。

    【讨论】:

    • 我使用的是 Ubuntu 13.04。您认为我需要安装哪些软件包?
    • @AaditMShah 好吧,我完全不知道,我上次使用 Ubuntu 已经很久了。
    • 我已经在直接的 32 位代码上看到了这一点。 ld,默认情况下,尝试使用/lib/ld-linux.so.1作为解释器/动态链接器......它不存在(在我的系统上)。 (您可以在文件的直接文本转储中看到这一点)解决方案是 ld -I/lib/ld-linux.so.2 ...--dynamic-linker-I 的别名,如果您喜欢更多的输入)。您系统上的位置可能不同,但我认为这是您遇到的情况。令人困惑,不是吗?可能需要指定-l readline(也可能需要指定L path-to-libreadline
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2011-03-13
    • 2012-12-19
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多