gpt4 book ai didi

c++ - 如何避免 iOS 二进制文件中的符号和源路径?

转载 作者:可可西里 更新时间:2023-11-01 03:06:45 24 4
gpt4 key购买 nike

当我编译我的 iOS 应用程序的 release 版本时(基于 Apple 提供的标准 iOS 应用程序模板),查看生成的可执行二进制文件,我看到各种符号甚至本地 cpp 源和标题路径在那里。我真的很困惑为什么会这样(我还没有启用 RTTI*)。尤其是源文件路径,让我在全局范围内发送这个应用程序感到不舒服(为什么每个人都能看到我的开发机器的目录布局?)。

这里有两个(随机挑选的,经过审核的)摘录:


TS/../ACTORS/CActorCanvasCharPart.cpplastMeshcapVerticesOFF BOUNDSupload VERTICES: %d
20CActorCanvasCharPartgrassscrub/Volumes/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame2_grass.cppbaseShadowmowerstartmowerloopmowermowerCharcutGrassChargrassStuffgrassParticles/Volumes/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame2_grass.h17CStateGame2_grasssinwriteStroke/Volumes/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame2_flowers.hflowerBedsandTrailclickstart3inplace2sandDrag/Volumes/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame

这里有很多自定义类型和结构的符号:


CAssetMgr="_vptr$CMgrBase"^^?"pMain"^{CMain}"inited"B"curveCount"S"curveSpecs"^{CCurveSpec}"gameSpecs"[23{CGameStateSpec="header"{SpecDiskHeader="type"i"version"S}"gameID"C"backgroundColor"{CRGBAcolorf="r"f"g"f"b"f"a"f}"clickPointColor"{CRGBAcolorf="r"f"g"f"b"f"a"f}"clickPointIconColor"{CRGBAcolorf="r"f"g"f"b"f"a"f}"hintColor"{CRGBAcolorf="r"f"g"f"b"f"a"f}}]"currentFont"^{CCharset}"userCharParts"^^{CCharPart}"words"{CDataSet<CName4,CCharArray>="_vptr$CObjectBase"^^?"pMain"^{CMain}"count"i"data"*"dataSize"l}"sets"{CDataSet<CName16,CCharArray>="_vptr$CObjectBase"^^?"pMain"^{CMain}"count"i"data"*"dataSize"l

这可以避免吗,如何避免?

*更新:我刚刚发现默认情况下 RTTI 是打开的。所以我清理了目标,禁用了 RTTI (GCC_ENABLE_CPP_RTTI = NO) 并重新编译。我仍然在二进制文件中看到很多符号和源路径。

更新 2:我检查了应用商店中的其他几个应用,其中许多还显示了它们的源文件路径。非常可怕,如果你问我:


Joined Up Lite<br/>
/Users/lloydy/Documents/Development/iPhone/ABC Joined Up/main.m<br/>
/Users/lloydy/Documents/Development/iPhone/ABC Joined Up/Classes/SettingsView.m


Crayon Physics<br/>
/Users/smproot/Desktop/unzip/CrayonPhysics/v104/Classes/crayon/src/ceng/gameutils/killspriteslowly/killspriteslowly.cpp<br/>
/Users/smproot/Desktop/unzip/CrayonPhysics/v104/Classes/crayon/src/ceng/tasks/task/sdl/mixer/ctaskaudiosdlmixer.cpp


Wall Times<br/>
/Users/fred/_WORK/ZDNDRP/WallTimes/main.m<br/>
/Users/fred/_WORK/ZDNDRP/WallTimes/Classes/SystemCategories.m


Jumbo Calculator<br/>
/Users/Christopher/Documents/Development/JumboCalculator 1.0.3/main.m<br/>
/Users/Christopher/Documents/Development/JumboCalculator 1.0.3/Classes/CalculatorFaceViewController.m

最佳答案

文件路径很可能来自断言宏,这些宏将 __FILE__ 字符串化为失败消息的一部分。 iOS 的 assert(3) 实现就是这样做的,NSAssert 宏也是如此。

您可以通过定义 NDEBUG(对于 C 断言)和 NS_BLOCK_ASSERTIONS(对于 NSAsserts)来删除发布版本中的断言。

关于c++ - 如何避免 iOS 二进制文件中的符号和源路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8167893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com