5

Ho un progetto in cui ho una libreria statica libhelper.a e un'altra con la mia libreria di oggetti condivisi, libtestlib.so. Il mio obiettivo è collegare libhelper.a a libtestlib.so. È possibile su Linux/BSD? Quando ho provato e ha creato un programma di test ho ottenuto i seguenti errori:Miscelazione di librerie statiche e librerie condivise

./prog1:/usr/local/lib/libtestlib.so.1.0: undefined simbolo ''

La mia ipotesi è che ciò si verifica perché libhelper.a non è stato compilato con -fPIC mentre lo era libtestlib.so. Qual è il modo corretto di creare programmi che utilizzano librerie condivise che hanno anche dipendenze su librerie statiche?

Grazie!

+0

"link libhelper.a in libtestlib.so" Cosa? –

+0

Cosa hai provato finora? In ogni caso, non conosco alcun modo per collegare codice non PIC in una libreria condivisa. Solitamente le librerie statiche sono collegate solo ai file eseguibili, motivo per cui sono raramente compilate con PIC. Non puoi collegare entrambe le librerie nell'eseguibile, o compilare entrambe con PIC sin dall'inizio? – Philipp

risposta

11

Il mio obiettivo è collegare libhelper.a in libtestlib.so. È possibile su Linux?

Sicuro. Questo dovrebbe fare:

gcc -shared -fPIC -o libtestlib.so $(OBJS) \ 
    -Wl,--whole-archive -lhelper -Wl,--no-whole-archive 

libhelper.a non è stato compilato con -fPIC

E 'meglio per ricostruire libhelper.a con -fPIC. Se ciò non è possibile, il comando sopra funzionerà ancora su Linux/ix86, ma non su es. Linux/x86_64.

Qual è il modo corretto di creare programmi che utilizzano librerie condivise che hanno anche dipendenze su librerie statiche?

Se si include libhelper.a in libtestlib.so come sopra, quindi semplice:

gcc main.c -ltestlib 

è tutto ciò che serve. Se insisti sul collegamento con libhelper.a, devi dire all'utente finale che deve collegarsi con, ad es.

gcc main.c -ltestlib -lhelper 

Non c'è modo di specificare che libtestlib.so dipende libhelper.a.

+0

Grazie, sono in grado di ricostruire libhelper.a con -fPIC quindi continuerò a farlo. –

Problemi correlati