使用当前源从 asm 代码编译共享库

使用当前源从 asm 代码编译共享库

我只是在 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

相关内容