我只是在 asm 中做了一些基本函数,并将其编译在共享库中。喜欢 :
BITS 64
global foo
section .text
foo:
mov rax, 1
ret
我编译了:
nasm -f elf64 foo.S -o foo.o && gcc -shared foo.o -o libfoo.so
我有一个主要的测试:
#include <stdio.h>
int foo();
int main()
{
printf("%d\n", foo());
return (0);
}
如果我直接用 foo.o 编译它,一切正常。但如果我这样编译:
gcc main.c -L. -lfoo
我会得到这个错误:
/usr/.../bin/ld: warning: type and size of dynamic symbol `foo' are not defined
我以为是因为没有声明原型,但是我用包含原型的lib.h文件重新编译了foo.o,也出现了同样的问题。
我是否必须完成 elf 文件的另一部分?
谢谢。
答案1
您需要指定该foo
符号对应于功能:
[BITS 64]
global foo:function
section .text
foo:
mov rax, 1
ret