2014-10-07 21 views
6

Ho una raccolta di libfooi.a; libfoo1.a, libfoo2.a, libfoo3.a ... che l'uso di fabbriche (con codice statico) abbia un'interfaccia comune per creare oggetti C++.Creare una libreria STATIC con un'altra libreria STATIC con contenuto all'interno di iOS utilizzando CMake

Con CMake, ne scelgo uno e creo un libfooWrapper.a che lo collega e aggiunge tutto il contenuto. Utilizzando questo CMake CMakeLists.txt lavora in Android:

PROJECT(fooWrapper) 

INCLUDE_DIRECTORIES(___) 

ADD_LIBRARY(fooWrapper SHARED ${SRC} ${HEADERS}) # Must be STATIC in iOS 

IF(selected1) 
    TARGET_LINK_LIBRARIES(fooWrapper -Wl,--whole-archive foo1 -Wl,--no-whole-archive) 
ELSEIF(...) 
    TARGET_LINK_LIBRARIES(fooWrapper -Wl,--whole-archive foo2 -Wl,--no-whole-archive) 

Un progetto eseguibile applicazione creato manualmente, basta link generato fooWrapper e lavoro.

Ma in iOS utilizzando Clang, ho modificato ADD_LIBRARY in STATIC e provo a utilizzare -Wl, - l'intero archivio ma non funziona. Ho controllato la documentazione di quello che utilizza -Obj -Wl, -force_load deve funzionare. Ho provato anche a usare flag -Obj -Wl, -all_load.

Analizzando la libreria libfooWrapper.a con otool, sembra che tutto il contenuto di libfooi.a non sia stato aggiunto in libfooWrapper.a, ma ho bisogno di inserirlo all'interno per evitare di cambiare manualmente i flag nel progetto di app eseguibile.

Cosa c'è di sbagliato nel collegamento?

risposta

7

Per iOS, utilizzare libtool per creare una singola libreria statica da più librerie statiche:

add_library(fooWrapper STATIC ${SRC} ${HEADERS}) 

add_custom_command(TARGET fooWrapper POST_BUILD 
    COMMAND /usr/bin/libtool -static -o $<TARGET_FILE:fooWrapper> 
    $<TARGET_FILE:fooWrapper> $<TARGET_FILE:foo1> $<TARGET_FILE:foo2> $<TARGET_FILE:foo3> 
) 

dell'azione post costruzione fonde la CMake obiettivi libreria statica foo1, foo2 e foo3 in fooWrapper. In alternativa, è possibile utilizzare i percorsi completi delle librerie invece delle espressioni del generatore $<TARGET_FILE:...>.

Problemi correlati