Compiling

使用目前原始碼從 asm 程式碼編譯共享庫

  • October 1, 2018

我只是在 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文件的另一部分嗎?

謝謝你。

您需要指定foo符號對應於函式

[BITS 64]
           global foo:function
           section .text
foo:
           mov rax, 1
           ret

引用自:https://unix.stackexchange.com/questions/271735