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?

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


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.