2009-08-21 27 views
5

Ho un progetto C++ (g ++/raw Makefile) progettato per linux, ho usato per collegare staticamente tutto ciò che ha funzionato bene per secoli. Ora voglio creare binari sia collegati staticamente che dinamicamente. Il seguente comando è usato nel mio Makefile per costruire la libreria dinamica (ad esempio libtest):come utilizzare la mia libreria dinamica in linux (Makefile)

$ (CXX) -shared -Wl, -soname, libtest.so.1 -o libtest.so.1.0.0 $ (LIBTEST_OBJS)

l'uscita è libtest.so.1.0.0 che ha il modo citarne libtest.so.1

ho trovato almeno un link libtest.so simbolica -> libtest.so.1.0.0 è necessario collegare il mio programma client che effettivamente utilizza la libreria libtest.so.1.0.0 generata sopra.

Qui la mia domanda è se voglio costruire il mio software, qual è il modo standard di gestire il collegamento simbolico sopra? Chiaramente non voglio questa roba in più nella mia directory dei sorgenti, ma è necessario per costruire il mio client binario, dovrò crearlo come collegamento temporaneo per costruire il client e poi rimuoverlo quando sarà finito? o devo creare una directory per ospitare la libreria .so di generare e i suoi collegamenti e lasciare tutto lì finché non faccio "make install" per installarli in altre directory specificate? Sarà bello per ora qual è il modo standard per farlo.

O forse il modo in cui generi librerie è errato? devo semplicemente generare libtest.so (come libreria reale, non un collegamento) per collegare il mio eseguibile, quindi rinominare la libreria e creare tali collegamenti quando si esegue `` make install ''?

qualsiasi input sarà apprezzato. :)

risposta

1

Certamente non generare libtest.so come un collegamento effettivo. In genere, l'installazione dei file di sviluppo della libreria condivisa installa i file .h e crea un collegamento simbolico libtest.so come parte di alcuni script di installazione che è necessario scrivere.

Se non si stanno installando i file di sviluppo, ma si utilizza solo la libreria nel processo di compilazione del proprio file binario, è sufficiente creare il collegamento symbolik dal makefile.

Qui non c'è molto di uno standard qui, alcuni preferiscono creare artefatti in una directory di compilazione separata, a qualcuno non interessa se è incorporato nella directory di origine. Tuttavia, mi piacerebbe creare una directory separata e mantenere la directory di origine pulita da tutti i file .o/.so/eseguibili.

Potreste trovare informazioni utili here

1

Il mio suggerimento è quello di utilizzare libtool che gestisce situazioni come questa.

+0

+1 L'uso di libtool renderà più semplice quando alla fine deciderete di portarlo da Linux a qualcos'altro - libtool gestisce tutti i problemi dipendenti dalla piattaforma delle librerie condivise. –

Problemi correlati