Assembly 32位Linux程序集-将文件链接在一起(gas和ld)
我编写了一个名为strlen的函数:Assembly 32位Linux程序集-将文件链接在一起(gas和ld),assembly,linker,ld,gnu-assembler,Assembly,Linker,Ld,Gnu Assembler,我编写了一个名为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
.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'
我一定错过了一些非常简单的东西。谢谢 早些时候,我愚蠢地在strlen.o上运行了
strip
,显然删除了所有符号。干得好。请包含所有代码,您永远不知道可能相关的内容。事实上,你问这个问题意味着你是最不可能准确判断的人:-)我知道这是一个可见性问题,而不是代码问题。这两个asm文件在组装时都没有错误,可见性与代码的.global部分或类似性质有关。我甚至记得读过一篇文章,你需要在函数上使用.global使其可见,这就是为什么我们将_start定义为一个global。为了进一步说明这一点: