Compilare il file .so dal file .c usando la riga di comando gcc


162

Sto cercando di creare un progetto ciao mondo per le librerie dinamiche di Linux (file .so). Quindi ho un file hello.c:

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

Come posso creare un file .so che esporta hello(), usando gcc dalla riga di comando?

Risposte:


293

Per generare una libreria condivisa devi prima compilare il tuo codice C con il -fPICflag (posizione codice indipendente).

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

Questo genererà un file oggetto (.o), ora lo prendi e crei il file .so:

gcc hello.o -shared -o libhello.so

MODIFICA : Suggerimenti dai commenti:

Puoi usare

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

per farlo in un solo passaggio. - Jonathan Leffler

Suggerisco anche di aggiungere -Wallper ottenere tutti gli avvisi e -gottenere informazioni di debug ai gcccomandi. - Basile Starynkevitch


1
Devi prima eseguire gcc -c -fPIC blabla.c -o blabla.o, quindi il comando sopra.
dreamcrash

57
O gcc -shared -o libhello.so -fPIC hello.cper farlo in un solo passaggio.
Jonathan Leffler,

5
Suggerisco anche di aggiungere -Wallper ottenere tutti gli avvisi e -gottenere informazioni di debug ai gcccomandi.
Basile Starynkevitch,

Grazie per i consigli, li ho aggiunti alla risposta
dreamcrash

3
Il .ofile @sashoalm è fondamentalmente un file oggetto per il file sorgente, prima di collegarli insieme, nell'eseguibile finale. Quindi quando si esegue gcc -o abc.c abc.oun file oggetto verrebbe generato. Quindi è possibile utilizzare questo abc.ofile per creare il .sofile. Per creare così tanti file, tutto ciò che serve è un codice c corretto scritto in un .cfile. PS: solo per chiarire i tuoi dubbi nel commento.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.