cmake 2.8
gcc (GCC) 4.8.1
Modifica ----------collegando una libreria condivisa con statica usando CMake
avvolgendo le librerie statiche in whole-archive
lavori per ogni libreria, tranne il pjmedia-videodev
Il problema ora è che quando provo e costruisco ottengo il seguente errore.
cbar_factory_init': colorbar_dev.c:(.text+0x2a0): undefined reference to pjmedia_format_init_video'
Ciao,
Ho creato una libreria condivisa e ho bisogno di collegare quella biblioteca con circa 10 librerie statiche. Quindi collego il mio eseguibile con la libreria condivisa.
La mia domanda è che quando eseguo make non riesce a collegarsi come vuole anche le librerie statiche. Lo scopo è creare un wrapper per le librerie statiche. Quindi l'eseguibile deve solo collegarsi con 1 singola libreria condivisa. Mentre collego la libreria condivisa con la statica, la statica diventerà automaticamente parte del codice sorgente della libreria condivisa.
Solo codice sippnet per renderlo breve. Nel mio CMakeLists.txt che crea la libreria condivisa e collega le librerie statiche:
add_library(app_module_sip SHARED app_module_sip_init.c)
set(PJSIP_LIBRARIES
g7221codec
gsmcodec
ilbccodec
milenage
pj
pjlib-util
pjmedia
pjmedia-codec
pjmedia-audiodev
pjmedia-videodev
pjnath
pjsip
pjsip-simple
pjsip-ua
pjsua
portaudio
resample
speex
srtp
)
target_link_libraries(app_module_sip pthread m uuid nsl rt asound crypto ssl ${PJSIP_LIBRARIES})
Ora la mia CMakeLists.txt che rende l'eseguibile
add_executable(app sip_test.c)
target_link_libraries(app app_module_sip)
È questo corretto quello che sto facendo qui. Non voglio collegare l'eseguibile con le librerie statiche. Solo la singola libreria condivisa in quanto è il mio wrapper in cui chiamerò le funzioni.
Fa link ok, se collego tutte le librerie statiche quando eseguo l'eseguibile, ma questo non è il risultato che voglio.
Molte grazie per qualsiasi suggerimento,
Quando collego app_module_sip a myapp, CMake sembra aggiungere tutte le librerie di nipoti come pjsua * oltre a * app_module_sip, e gli oggetti duplicati rovinano l'inizializzazione statica, per non parlare delle dimensioni binate. – nodakai