【发布时间】:2014-12-01 12:51:45
【问题描述】:
我有一个 libfooi.a 的集合; libfoo1.a、libfoo2.a、libfoo3.a ... 使用工厂(带有静态代码)具有创建 C++ 对象的通用接口。
使用 CMake,我选择其中一个,然后创建一个 libfooWrapper.a 链接它并添加所有内容。使用 CMake 这个 CMakeLists.txt 在 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)
手动创建的可执行应用项目,只需链接生成的 fooWrapper 即可工作。
但在使用 Clang 的 iOS 中,我已将 ADD_LIBRARY 更改为 STATIC,并尝试使用 -Wl,--whole-archive 但不起作用。我已经检查了使用 -Obj -Wl,-force_load 必须工作的文档。我也尝试过使用标志-Obj -Wl,-all_load。
使用otool分析库libfooWrapper.a,似乎libfooi.a中的所有内容都没有添加到libfooWrapper.a中,但我需要将其放入其中以避免在可执行应用程序项目中手动更改标志。
链接有什么问题?
【问题讨论】:
标签: ios cmake cross-platform static-linking