【问题标题】:32-bit Linux Assembly - Linking files together (gas and ld)32 位 Linux 程序集 - 将文件链接在一起(gas 和 ld)
【发布时间】:2011-04-20 15:24:31
【问题描述】:

我写了一个叫做 strlen 的函数:

.section .text
.global strlen
.type strlen, @function
strlen:
... code ...

我是这样组装的:

as --32 strlen.asm -o strlen.o

然后我在 asm 中编写了一个程序来打印我想与之链接的 argv。我用同样的方法组装。现在我想将它们链接在一起,以便实际程序可以使用 strlen。我试过了:

ld printnum.o strlen.o -m elf_i386 -o printnum

但这会产生:

printnum.o: In function `loop':
(.text+0x5): undefined reference to `strlen'

我一定错过了一些非常简单的东西。谢谢!

【问题讨论】:

  • 请包含所有代码,你永远不知道什么是相关的。你问这个问题的事实意味着你是最不可能准确决定的人:-)
  • 我知道这是可见性问题,而不是代码问题。两个 asm 文件的组合都没有错误,可见性与代码的 .global 部分或类似的东西有关。我什至记得读过你需要在函数上使用 .global 才能使其可见,这就是我们将 _start 定义为全局的原因。

标签: assembly linker ld gnu-assembler


【解决方案1】:

早些时候,我在 strlen.o 上愚蠢地运行了strip,这显然删除了所有符号。干得好。

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 2013-03-06
    • 2012-12-25
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2011-10-20
    相关资源
    最近更新 更多