cmake 2.8
gcc (GCC) 4.8.1
Edycja ----------łącząc wspólną bibliotekę ze statyki z wykorzystaniem CMake
owijając statycznych bibliotek w whole-archive
robót dla każdej biblioteki oprócz pjmedia-videodev
Problem jest teraz, że gdy próbuję i kompilacji pojawia się następujący błąd.
cbar_factory_init': colorbar_dev.c:(.text+0x2a0): undefined reference to pjmedia_format_init_video'
Witam,
I stworzyli wspólną bibliotekę i muszę połączyć tę bibliotekę z około 10 bibliotek statycznych. Następnie łączę mój plik wykonywalny z biblioteką współdzieloną.
Moje pytanie jest takie, że po uruchomieniu sprawię, że nie będzie się on łączyć, tak jak chce również statycznych bibliotek. Celem jest utworzenie opakowania dla bibliotek statycznych. Tak więc plik wykonywalny musi tylko łączyć się z 1 pojedynczą wspólną biblioteką. Ponieważ łączę bibliotekę współużytkowaną ze statyką, statyka automatycznie stanie się częścią kodu źródłowego biblioteki współdzielonej.
Tylko kod sippnety, aby było krótkie. W moim CMakeLists.txt który tworzy wspólną bibliotekę i łączy bibliotek statycznych:
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})
Teraz moim CMakeLists.txt sprawia, że plik wykonywalny
add_executable(app sip_test.c)
target_link_libraries(app app_module_sip)
jest to prawidłowe, co robię tutaj. Nie chcę łączyć pliku wykonywalnego z bibliotekami statycznymi. Tylko pojedyncza biblioteka współdzielona, to jest moje opakowanie, do którego będę wywoływał funkcje.
To działa poprawnie, jeśli połączę wszystkie biblioteki ze statykami podczas wykonywania pliku wykonywalnego, ale to nie jest wynik, którego chcę.
Wielkie dzięki za wszelkie sugestie,
Kiedy łączę app_module_sip z myapp, CMake wydaje się dodawać wszystkie biblioteki wnuków, takie jak pjsua *, oprócz * app_module_sip, a zduplikowane obiekty komunikują statyczną inicjalizację, nie wspominając już o nadmiernym rozmiarze binarnym. – nodakai