
私は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
私はプロトタイプが宣言されていないので、私はそのようなことを知りました。
elfファイルの他の部分を完成させる必要がありますか?
ありがとうございます。
答え1
foo
記号が次に対応することを指定する必要があります。機能:
[BITS 64]
global foo:function
section .text
foo:
mov rax, 1
ret