방금 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