Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 32位Linux程序集-将文件链接在一起(gas和ld)_Assembly_Linker_Ld_Gnu Assembler - Fatal编程技术网

Assembly 32位Linux程序集-将文件链接在一起(gas和ld)

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

我编写了一个名为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'

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

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

请包含所有代码,您永远不知道可能相关的内容。事实上,你问这个问题意味着你是最不可能准确判断的人:-)我知道这是一个可见性问题,而不是代码问题。这两个asm文件在组装时都没有错误,可见性与代码的.global部分或类似性质有关。我甚至记得读过一篇文章,你需要在函数上使用.global使其可见,这就是为什么我们将_start定义为一个global。为了进一步说明这一点: