动态框架:如何隐藏局部符号?
dynamic framework: how to hide the local symbols?
我正在构建一个包含 iphonesimulator 和 iphoneos 框架的 .xcframework。有一些 Swift 代码和一些 C++ 代码,链接到一个共享对象(Mach-O 64 位动态链接共享库 arm64)。我用 -fvisibility=hidden
构建我的 C++,并且只导出我明确标记的符号。但是,当我 运行 nm -gC
时,我看到各种符号仍然存在 – 即使在使用此框架构建的 iOS 应用程序中,它们也是可见的。例如,我有一个内部 class Secret
(它只在一个 cpp 文件中使用)。 nm -gC
向我展示(以及那里的所有黑客)
00010292 t Secret::getString() const
有没有办法隐藏此信息和其他敏感信息?
另一方面,我怎样才能保持自动生成的 _AlexSDKVersionNumber
导出?
您应该正确配置您的项目设置,以便剥离以隐藏内部名称。
前往 Your target
> Build Settings
> Deployment
:
将 Deployment Postprocessing
设置为 YES
以启用剥离。
将 Strip Style
设置为 Non-Global Symbols
。
现在 nm
应该仅为您的二进制文件提供全局(外部)符号。
至于保持自动生成的 _AlexSDKVersionNumber
导出,我想出了一个不那么肮脏的技巧:
为我的项目添加一个头文件,命名为AlexSDK_vers.h:
extern __attribute__ ((visibility("default"))) const double AlexSDKVersionNumber;
在构建设置中,添加OTHER_CFLAGS=-include${PWD}/AlexSDK/AlexSDK_vers.h
我正在构建一个包含 iphonesimulator 和 iphoneos 框架的 .xcframework。有一些 Swift 代码和一些 C++ 代码,链接到一个共享对象(Mach-O 64 位动态链接共享库 arm64)。我用 -fvisibility=hidden
构建我的 C++,并且只导出我明确标记的符号。但是,当我 运行 nm -gC
时,我看到各种符号仍然存在 – 即使在使用此框架构建的 iOS 应用程序中,它们也是可见的。例如,我有一个内部 class Secret
(它只在一个 cpp 文件中使用)。 nm -gC
向我展示(以及那里的所有黑客)
00010292 t Secret::getString() const
有没有办法隐藏此信息和其他敏感信息?
另一方面,我怎样才能保持自动生成的 _AlexSDKVersionNumber
导出?
您应该正确配置您的项目设置,以便剥离以隐藏内部名称。
前往 Your target
> Build Settings
> Deployment
:
将
Deployment Postprocessing
设置为YES
以启用剥离。将
Strip Style
设置为Non-Global Symbols
。
现在 nm
应该仅为您的二进制文件提供全局(外部)符号。
至于保持自动生成的 _AlexSDKVersionNumber
导出,我想出了一个不那么肮脏的技巧:
为我的项目添加一个头文件,命名为AlexSDK_vers.h:
extern __attribute__ ((visibility("default"))) const double AlexSDKVersionNumber;
在构建设置中,添加
OTHER_CFLAGS=-include${PWD}/AlexSDK/AlexSDK_vers.h