Compila a biblioteca compartilhada do código asm com as fontes atuais

2

Acabei de fazer algumas funções básicas em asm que eu compilo em uma biblioteca compartilhada. Como:

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

Eu compilei com:

nasm -f elf64 foo.S -o foo.o && gcc -shared foo.o -o libfoo.so

Eu tenho um teste principal:

#include <stdio.h>
int foo();

int main()
{
  printf("%d\n", foo());
  return (0);
}

Se eu o compilei diretamente com o foo.o, tudo funcionou bem. Mas se eu compilasse assim:

gcc main.c -L. -lfoo

Eu recebo este erro:

/usr/.../bin/ld: warning: type and size of dynamic symbol 'foo' are not defined

Eu achei que era porque o protótipo não foi declarado, mas eu recompilei foo.o com um arquivo lib.h contendo o protótipo, e o mesmo problema ocorreu.

É necessário que eu complete outra seção do arquivo elf?

Obrigado.

    
por OOM 23.03.2016 / 17:46

1 resposta

2

Você precisa especificar que o símbolo foo corresponde a uma função :

[BITS 64]
            global foo:function
            section .text
foo:
            mov rax, 1
            ret
    
por 23.03.2016 / 18:35