현재 소스를 사용하여 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

관련 정보