Cree el archivo .so desde el archivo .c usando la línea de comando gcc

162

Estoy tratando de crear un proyecto hello world para bibliotecas dinámicas de Linux (archivos .so). Entonces tengo un archivo hello.c:

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

¿Cómo creo un archivo .so que se exporta hello(), usando gcc desde la línea de comandos?

sashoalm
fuente

Respuestas:

291

Para generar una biblioteca compartida, primero necesita compilar su código C con el -fPICindicador (código de posición independiente).

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

Esto generará un archivo de objeto (.o), ahora lo toma y crea el archivo .so:

gcc hello.o -shared -o libhello.so

EDITAR : Sugerencias de los comentarios:

Puedes usar

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

hacerlo en un solo paso. - Jonathan Leffler

También sugiero agregar -Wallpara obtener todas las advertencias y -gobtener información de depuración de sus gcccomandos. - Basile Starynkevitch

Dreamcrash
fuente
1
Primero debe hacer gcc -c -fPIC blabla.c -o blabla.o, luego el comando anterior.
dreamcrash
57
O gcc -shared -o libhello.so -fPIC hello.chacerlo en un solo paso.
Jonathan Leffler
55
También sugiero agregar -Wallpara obtener todas las advertencias y -gobtener información de depuración de sus gcccomandos.
Basile Starynkevitch
Gracias por las recomendaciones, las agregué a la respuesta
dreamcrash
3
El .oarchivo @sashoalm es básicamente un archivo objeto para el archivo fuente, antes de vincularlos, en el ejecutable final. Entonces, cuando ejecuta gcc -o abc.c abc.oun archivo de objeto, se generaría. Resp. Entonces puede usar este abc.oarchivo para crear un .soarchivo. Para crear tantos archivos, todo lo que necesita es un código c correcto escrito en un .carchivo. PD: Solo por aclarar tu duda en el comentario.