动态框架:如何隐藏局部符号?



我正在构建一个.xcframework,其中包含一个iphone模拟器和iphoneos框架。有一些Swift代码和一些c++代码,它们被链接到一个共享对象(Mach-O 64位动态链接的共享库arm64)。我用-fvisibility=hidden构建我的c++,只有我明确标记的符号才会被导出。但是,当我运行nm -gC时,我看到各种各样的符号仍然在那里-它们甚至在使用这个框架构建的iOS应用程序中也是可见的。例如,我有一个内部类Secret(它只在一个cpp中使用)文件)。nm -gC告诉我(和所有的黑客)

00010292 t Secret::getString() const

是否有办法隐藏这个和其他敏感信息?

另一方面,我如何保持自动生成的_AlexSDKVersionNumber导出?

您应该正确配置剥离的项目设置以隐藏内部名称。

进入Your target>Build Settings祝辞Deployment:

  1. 设置Deployment PostprocessingYES使能剥离

  2. 设置Strip StyleNon-Global Symbols

现在nm应该只为您的二进制文件提供全局(外部)符号。

为了保持自动生成的_AlexSDKVersionNumber的导出,我想出了一个不太脏的方法:

  1. 添加一个头文件到我的项目,命名为alexsdk_vs .h:

    extern __attribute__ ((visibility("default"))) const double AlexSDKVersionNumber;
    
  2. 在Build Settings中添加OTHER_CFLAGS=-include${PWD}/AlexSDK/AlexSDK_vers.h

最新更新