cmake 2.8
gcc (GCC) 4.8.1
bearbeiten ----------eine gemeinsame Bibliothek mit Statik Verknüpfung CMake mit
die statischen Bibliotheken für jede Bibliothek in whole-archive
Arbeiten Verpackung mit Ausnahme der pjmedia-videodev
Das Problem ist jetzt, dass wenn ich versuche, und Build bekomme ich den folgenden Fehler.
cbar_factory_init': colorbar_dev.c:(.text+0x2a0): undefined reference to pjmedia_format_init_video'
Hallo,
Ich habe eine gemeinsame Bibliothek erstellt und ich brauche diese Bibliothek mit etwa 10 statischen Bibliotheken zu verknüpfen. Ich verlinke dann meine ausführbare Datei mit der gemeinsam genutzten Bibliothek.
Meine Frage ist, dass, wenn ich renne, es nicht verbindet, wie es auch die statischen Bibliotheken will. Der Zweck besteht darin, einen Wrapper für die statischen Bibliotheken zu erstellen. Die ausführbare Datei muss also nur mit einer einzelnen gemeinsamen Bibliothek verknüpft sein. Da ich die shared library mit der Statik verknüpfe, wird die Statik automatisch Teil des Quellcodes der shared library.
Nur Code sippnets, um es kurz zu machen. In meinem CMakeLists.txt, die die gemeinsame Bibliothek und verbindet die statischen Bibliotheken erstellt:
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})
Nun meine CMakeLists.txt, der die ausführbare
add_executable(app sip_test.c)
target_link_libraries(app app_module_sip)
macht das richtig, was ich hier tue. Ich möchte die ausführbare Datei nicht mit den statischen Bibliotheken verknüpfen. Nur die einzelne gemeinsame Bibliothek als das ist mein Wrapper, was ich die Funktionen in aufrufen werde.
Es funktioniert Link ok, wenn ich alle Statik-Bibliotheken verknüpfen, wenn Sie die ausführbare Datei, aber das ist nicht das Ergebnis, das ich will.
Vielen Dank für Ihre Anregungen,
Wenn ich app_module_sip mit myapp verknüpfe, scheint CMake alle Enkelbibliotheken wie pjsua * zusätzlich zu * app_module_sip hinzuzufügen, und die doppelten Objekte vermasseln die statische Initialisierung, ganz zu schweigen von der aufgeblähten binären Größe. – nodakai