我正在使用xCode 7在MacOSX上创建.component
软件包。我试图摆脱所有调试符号和库符号以进行发布配置。
我在xCode中设置了所有合适的选项(例如Strip Debug Symbols
,Strip style
到all symbols
,symbols hidden by default
等。
不幸的是,在编译和链接的component
文件中仍然可以看到一些符号。
所以我使用strip -x -S mybundle.component
从外部删除它们。它几乎可以工作但不适用于lambdas
来电者。如果任何方法正在使用lambda
表达式,则生成的二进制文件具有名称以及所有被调用者和调用者,直到lambda
本身在链接器中#34;半混淆"像ZN18MyClassName8MetodNameEP9BSFirstParamP7SecondParamE3$_1
这样的风格
所以它看起来像链接器问题?
举个例子,一些代码:
class AClass {
public:
void methodCallingCallbackInTheEnd();
std::function<void(C*, D*)> myCallback;
}
class BClass {
AClass a;
CClass *c;
DClass *d;
public:
methodOfClassB() {
a->callback = [c,d] (C* c, D* d) {
//do something with c and d objects
};
a->methodCallingCallbackInTheEnd();
}
}
class EClass {
public:
EMethodNotVisibleInBinary();
}
所以,作为编译和链接的效果,我可以在二进制文件中看到A和B类的一些条目,即使参数类型为C和D也是如此:
ZN18AClass8callbackE34$_2
接下来是关于回调本身的一些信息,例如:
ZN18BClass8methodOfClassBEP9BSCClassP7DClassE3$_1
有没有办法摆脱它们?为什么他们出现? EClass
,EMethodNotVisibleInBinary
等当然不可见。 .component
文件中没有这样的字符串。
这对我来说非常重要,我当然不想混淆那些部分。
有什么想法吗?