我们有一个巨大的代码库,其中包含多个依赖项(如 tinyxml、fft 等)、模板……在 C/C++ 中,所有这些都整齐地包装在一个非常简单的 C 接口(interface)后面。
为 OSX 构建一个动态库就好了,因为我们可以轻松地从库中删除所有不需要的符号(使用 strip -S -x)只留下想要的 C 接口(interface)并隐藏所有 C++ 类/模板/依赖项/...所以最后,唯一导出/可见的符号是我们的 API 调用:OUR_LIBNAME_FUNC1、OUR_LIBNAME_FUNC2 等
然而,我们现在想对 iOS 静态库做同样的事情,但我们的想法已经不多了。有没有办法隐藏所有不需要/想要的符号,而不会恢复到一大堆代码合并、重写代码、objdump-ing、混淆......?特别是对于可能被其他人重用的外部库,这将导致多个符号定义!
经过大量研究(主要是堆栈溢出:-))我有点绝望......
打招呼
最佳答案
好的,我只是花了很多时间做类似的事情。这是不完美的,但这对于我们的目的来说已经足够好了。
本身带有链接器添加的“_”
像这样的东西:
% cat c_api.c
#include "libA.h"
#include "libB.h"
#include "libC.h"
void init()
{
libA_startup();
}
void run()
{
libB_execute(libA_context());
}
void stop()
{
libA_shutdown();
libB_end();
libC_log();
}
% cat c_api.symbols
_init
_run
_stop
% cc -c a_api.c
% ld -x -r c_api.o libA.a libB.a libC.a -exported_symbols_list c_api.symbols -o c_api_hidden.o
% ar r c_api.a c_api_hidden.o
关于ios - 在 iOS 静态库中打包一个 BIG C++ 项目 : dependencies, 剥离和隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9802378/