Mam kolekcję libfooi.a; libfoo1.a, libfoo2.a, libfoo3.a ... że używanie fabryk (z kodem statycznym) ma wspólny interfejs do tworzenia obiektów C++.Utwórz bibliotekę STATIC z inną biblioteką STATIC, której zawartość w systemie iOS używa CMake
Z CMake wybieram jedną z nich i tworzę libfooWrapper.a, która łączy ją i dodaje całą zawartość. Korzystanie CMake to CMakeLists.txt działa w Androidzie:
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)
wykonywalny aplikacji projekt tworzony ręcznie, po prostu link wygenerowany fooWrapper i pracy.
Ale w systemie iOS przy użyciu języka Clang zmieniłem ADD_LIBRARY na STATIC i spróbuj użyć -Wl, - całe archiwum, ale nie działa. Sprawdziłem dokumentację tego przy użyciu -Obj -Wl, -force_load musi działać. Próbowałem też używać flagi -Obj -Wl, -all_load.
Analizowanie biblioteki libfooWrapper.a z otool, wydaje się, że cała zawartość z libfooi.a nie jest dodana do libfooWrapper.a, ale muszę umieścić ją w środku, aby uniknąć ręcznego zmieniania flag w projekcie aplikacji wykonywalnej.
Co jest nie tak z łączeniem?