Crie arquivo .so a partir do arquivo .c usando a linha de comando gcc


162

Estou tentando criar um projeto hello world para bibliotecas dinâmicas do Linux (arquivos .so). Então, eu tenho um arquivo hello.c:

#include <stdio.h>
void hello()
{
    printf("Hello world!\n");
}

Como crio um arquivo .so que exporta hello()usando o gcc na linha de comando?

Respostas:


291

Para gerar uma biblioteca compartilhada, você precisa primeiro compilar seu código C com o -fPICsinalizador (código independente de posição).

gcc -c -fPIC hello.c -o hello.o

Isso irá gerar um arquivo de objeto (.o), agora você o pega e cria o arquivo .so:

gcc hello.o -shared -o libhello.so

EDIT : Sugestões dos comentários:

Você pode usar

gcc -shared -o libhello.so -fPIC hello.c

para fazer isso em uma etapa. - Jonathan Leffler

Também sugiro adicionar -Wallpara obter todos os avisos e -gobter informações de depuração aos seus gcccomandos. - Basile Starynkevitch


1
Você deve executar gcc -c -fPIC blabla.c -o blabla.o primeiro e, em seguida, o comando acima.
dreamcrash

57
Ou gcc -shared -o libhello.so -fPIC hello.cpara fazê-lo em uma etapa.
31813 Jonathan Leffler

5
Também sugiro adicionar -Wallpara obter todos os avisos e -gobter informações de depuração aos seus gcccomandos.
Basile Starynkevitch 14/02

Obrigado pelas recomendações, eu adicionei-los para a resposta
dreamcrash

3
O .oarquivo @sashoalm é basicamente um arquivo de objeto para o arquivo de origem, antes de vinculá-los, no executável final. Então, quando você executa gcc -o abc.c abc.oum arquivo de objeto, será gerado. Resp, então você pode usar esse abc.oarquivo para criar um .soarquivo. Para criar tantos arquivos, tudo o que você precisa é de um código c correto, escrito em um .carquivo. PS: Apenas para esclarecer sua dúvida no comentário.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.