su windows funziona e ovviamente crea una dll in pe (non in elf) di nome libfoo.so, ma ho fatto solo questi comandi (elimina tutti i file *.o prima) - il terzo non serveLibrerie condivise di ELF
Per eseguire la compilazione di libfoo.so come libreria condivisa, i passi di base hanno la seguente forma:
$ gcc -fPIC -c *.c
$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
$ ln -s libfoo.so.1.0 libfoo.so.1
$ ln -s libfoo.so.1 libfoo.so
$ LD_LIBRARY_PATH='pwd':$LD_LIBRARY_PATH ; export LD_LIBRARY_PATH
Questi comandi genererano una libreria condivisa denominata libfoo.so.1.0, i collegamenti appropriati per ld (libfoo.so) e il caricamento dinamico (libfoo.so.1) per trovarla. Per eseguire un collaudo, si aggiunge la directory corrente a LD_LIBRARY_PATH.
Quando si è sicuri che la libreria funziona, deve essere spostata, ad esempio, in /usr/local/lib, e devono essere creati appropriati collegamenti. Il collegamento da libfoo.so.1 a libfoo.so.1.0 è mantenuto aggiornato da ldconfig, che nella maggior parte dei sistemi viene eseguito come parte del processo di avviamento. Il collegamento libfoo.so deve essere aggiornato manualmente. Se si è scrupolosi nell'eseguire l'aggiornamento di tutte le parti di una libreria (ossia degli header file) contemporaneamente, la cosa più semplice da fare consiste nel rendere libfoo.so -> libfoo.so.1, in modo che ldconfig mantenga correnti entrambi i collegamenti. In caso contrario, potrebbe in seguito verificarsi ogni genere di stranezza.
$ su
# cp libfoo.so.1.0 /usr/local/lib
# /sbin/ldconfig
# ( cd /usr/local/lib ; ln -s libfoo.so.1 libfoo.so )
Codice:
$ gcc -fPIC -c zakiya.c
$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
$ ln -s libfoo.so.1.0 libfoo.so.1