我想提供一个C静态库并尽可能隐藏内部实现。我在我的代码上使用代码混淆器,这对于使符号对人类来说难以理解非常有效。我正在使用xcode 4,我假设它有GCC之类的标志。
我的问题是我的图书馆仍然包含我想要隐藏或让人类无法理解的可读信息:
1-对象文件名: 当我在.a上运行nm时,我仍然可以看到每个目标文件的名称。 (即myObect1.o myObject2.o等)。有没有办法从我的.a中删除这些名称?
2-文件路径: 当我在我的库上运行字符串时,我仍然看到头文件的路径以及一些.c文件路径(包含在#include中)。有没有办法删除这些。 (GCC旗帜或其他方式)?
谢谢你的帮助,
巴巴
ps:我知道nm和字符串,但是如果你知道任何其他工具,或者如果你能提出任何其他我应该检查的内容,请将其隐藏在我的.a中,欢迎提出所有建议。
答案 0 :(得分:2)
考虑像SQLite那样分发合并:http://www.sqlite.org/amalgamation.html。换句话说,而不是库,分发单个.o文件和单个.h文件。
您必须将内部函数注释为静态。这也将为编译器提供进一步优化的机会。 Lua使用这样的注释。例如,请参阅http://www.lua.org/source/5.1/ldo.h.html。对于合并,LUAI_FUNC
被定义为静态。