【发布时间】: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