├── GAG-LinkMap-normal-x86_64.txt ├── LinkMapAnalyzer ├── LinkMapAnalyzer.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── miaoyou.gmy.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── xcshareddata │ └── xcschemes │ │ └── LinkMapAnalyzer.xcscheme └── xcuserdata │ └── miaoyou.gmy.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── README.md ├── WORKSPACE ├── bazel_build.sh ├── iOS-LinkMapAnalyzer ├── .clang-format ├── BUILD ├── Common.h ├── Debug.h ├── LinkMapAnalyzer.cpp ├── LinkMapAnalyzer.h ├── LinkMapSessionDefine.h ├── Makefile ├── ObjectFile.h ├── ObjectModule.h ├── in.txt ├── main.cpp └── out.txt └── out.txt /GAG-LinkMap-normal-x86_64.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/778477/iOS-LinkMapAnalyzer/fc9920d8643c656645415ec0561e2411b0587c4c/GAG-LinkMap-normal-x86_64.txt -------------------------------------------------------------------------------- /LinkMapAnalyzer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/778477/iOS-LinkMapAnalyzer/fc9920d8643c656645415ec0561e2411b0587c4c/LinkMapAnalyzer -------------------------------------------------------------------------------- /LinkMapAnalyzer.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | F5484B561E1629AE008FED72 /* LinkMapAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5484B4F1E1629AE008FED72 /* LinkMapAnalyzer.cpp */; }; 11 | F5484B571E1629AE008FED72 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5484B521E1629AE008FED72 /* main.cpp */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXCopyFilesBuildPhase section */ 15 | F51352E71A80FB42002E199C /* CopyFiles */ = { 16 | isa = PBXCopyFilesBuildPhase; 17 | buildActionMask = 2147483647; 18 | dstPath = /usr/share/man/man1/; 19 | dstSubfolderSpec = 0; 20 | files = ( 21 | ); 22 | runOnlyForDeploymentPostprocessing = 1; 23 | }; 24 | /* End PBXCopyFilesBuildPhase section */ 25 | 26 | /* Begin PBXFileReference section */ 27 | F51352E91A80FB42002E199C /* LinkMapAnalyzer */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = LinkMapAnalyzer; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | F52AB7FC1E16229600B94645 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 29 | F533206F1FA0AC79000E1BDB /* Common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Common.h; sourceTree = ""; }; 30 | F53320701FA0B179000E1BDB /* out.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = out.txt; sourceTree = ""; }; 31 | F5484B4D1E1629AE008FED72 /* Debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Debug.h; sourceTree = ""; }; 32 | F5484B4E1E1629AE008FED72 /* in.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = in.txt; sourceTree = ""; }; 33 | F5484B4F1E1629AE008FED72 /* LinkMapAnalyzer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkMapAnalyzer.cpp; sourceTree = ""; }; 34 | F5484B501E1629AE008FED72 /* LinkMapAnalyzer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkMapAnalyzer.h; sourceTree = ""; }; 35 | F5484B511E1629AE008FED72 /* LinkMapSessionDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkMapSessionDefine.h; sourceTree = ""; }; 36 | F5484B521E1629AE008FED72 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; 37 | F5484B531E1629AE008FED72 /* ObjectFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectFile.h; sourceTree = ""; }; 38 | F5484B541E1629AE008FED72 /* ObjectModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectModule.h; sourceTree = ""; }; 39 | /* End PBXFileReference section */ 40 | 41 | /* Begin PBXFrameworksBuildPhase section */ 42 | F51352E61A80FB42002E199C /* Frameworks */ = { 43 | isa = PBXFrameworksBuildPhase; 44 | buildActionMask = 2147483647; 45 | files = ( 46 | ); 47 | runOnlyForDeploymentPostprocessing = 0; 48 | }; 49 | /* End PBXFrameworksBuildPhase section */ 50 | 51 | /* Begin PBXGroup section */ 52 | F51352E01A80FB42002E199C = { 53 | isa = PBXGroup; 54 | children = ( 55 | F5484B4B1E1629AE008FED72 /* iOS-LinkMapAnalyzer */, 56 | F52AB7FC1E16229600B94645 /* README.md */, 57 | F51352EA1A80FB42002E199C /* Products */, 58 | ); 59 | sourceTree = ""; 60 | }; 61 | F51352EA1A80FB42002E199C /* Products */ = { 62 | isa = PBXGroup; 63 | children = ( 64 | F51352E91A80FB42002E199C /* LinkMapAnalyzer */, 65 | ); 66 | name = Products; 67 | sourceTree = ""; 68 | }; 69 | F5484B4B1E1629AE008FED72 /* iOS-LinkMapAnalyzer */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | F5484B4F1E1629AE008FED72 /* LinkMapAnalyzer.cpp */, 73 | F5484B521E1629AE008FED72 /* main.cpp */, 74 | F533206F1FA0AC79000E1BDB /* Common.h */, 75 | F5484B4D1E1629AE008FED72 /* Debug.h */, 76 | F5484B501E1629AE008FED72 /* LinkMapAnalyzer.h */, 77 | F5484B511E1629AE008FED72 /* LinkMapSessionDefine.h */, 78 | F5484B531E1629AE008FED72 /* ObjectFile.h */, 79 | F5484B541E1629AE008FED72 /* ObjectModule.h */, 80 | F5484B4E1E1629AE008FED72 /* in.txt */, 81 | F53320701FA0B179000E1BDB /* out.txt */, 82 | ); 83 | path = "iOS-LinkMapAnalyzer"; 84 | sourceTree = ""; 85 | }; 86 | /* End PBXGroup section */ 87 | 88 | /* Begin PBXNativeTarget section */ 89 | F51352E81A80FB42002E199C /* LinkMapAnalyzer */ = { 90 | isa = PBXNativeTarget; 91 | buildConfigurationList = F51352F01A80FB42002E199C /* Build configuration list for PBXNativeTarget "LinkMapAnalyzer" */; 92 | buildPhases = ( 93 | F51352E51A80FB42002E199C /* Sources */, 94 | F51352E61A80FB42002E199C /* Frameworks */, 95 | F51352E71A80FB42002E199C /* CopyFiles */, 96 | ); 97 | buildRules = ( 98 | ); 99 | dependencies = ( 100 | ); 101 | name = LinkMapAnalyzer; 102 | productName = ACM; 103 | productReference = F51352E91A80FB42002E199C /* LinkMapAnalyzer */; 104 | productType = "com.apple.product-type.tool"; 105 | }; 106 | /* End PBXNativeTarget section */ 107 | 108 | /* Begin PBXProject section */ 109 | F51352E11A80FB42002E199C /* Project object */ = { 110 | isa = PBXProject; 111 | attributes = { 112 | LastUpgradeCheck = 0900; 113 | ORGANIZATIONNAME = miaoyou.gmy; 114 | TargetAttributes = { 115 | F51352E81A80FB42002E199C = { 116 | CreatedOnToolsVersion = 6.1.1; 117 | }; 118 | }; 119 | }; 120 | buildConfigurationList = F51352E41A80FB42002E199C /* Build configuration list for PBXProject "LinkMapAnalyzer" */; 121 | compatibilityVersion = "Xcode 3.2"; 122 | developmentRegion = English; 123 | hasScannedForEncodings = 0; 124 | knownRegions = ( 125 | English, 126 | en, 127 | ); 128 | mainGroup = F51352E01A80FB42002E199C; 129 | productRefGroup = F51352EA1A80FB42002E199C /* Products */; 130 | projectDirPath = ""; 131 | projectRoot = ""; 132 | targets = ( 133 | F51352E81A80FB42002E199C /* LinkMapAnalyzer */, 134 | ); 135 | }; 136 | /* End PBXProject section */ 137 | 138 | /* Begin PBXSourcesBuildPhase section */ 139 | F51352E51A80FB42002E199C /* Sources */ = { 140 | isa = PBXSourcesBuildPhase; 141 | buildActionMask = 2147483647; 142 | files = ( 143 | F5484B561E1629AE008FED72 /* LinkMapAnalyzer.cpp in Sources */, 144 | F5484B571E1629AE008FED72 /* main.cpp in Sources */, 145 | ); 146 | runOnlyForDeploymentPostprocessing = 0; 147 | }; 148 | /* End PBXSourcesBuildPhase section */ 149 | 150 | /* Begin XCBuildConfiguration section */ 151 | F51352EE1A80FB42002E199C /* Debug */ = { 152 | isa = XCBuildConfiguration; 153 | buildSettings = { 154 | ALWAYS_SEARCH_USER_PATHS = NO; 155 | CLANG_CXX_LANGUAGE_STANDARD = "c++17"; 156 | CLANG_CXX_LIBRARY = "libc++"; 157 | CLANG_ENABLE_MODULES = YES; 158 | CLANG_ENABLE_OBJC_ARC = YES; 159 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 160 | CLANG_WARN_BOOL_CONVERSION = YES; 161 | CLANG_WARN_COMMA = YES; 162 | CLANG_WARN_CONSTANT_CONVERSION = YES; 163 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 164 | CLANG_WARN_EMPTY_BODY = YES; 165 | CLANG_WARN_ENUM_CONVERSION = YES; 166 | CLANG_WARN_INFINITE_RECURSION = YES; 167 | CLANG_WARN_INT_CONVERSION = YES; 168 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 169 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 170 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 171 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 172 | CLANG_WARN_STRICT_PROTOTYPES = YES; 173 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 174 | CLANG_WARN_UNREACHABLE_CODE = YES; 175 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 176 | COPY_PHASE_STRIP = NO; 177 | ENABLE_STRICT_OBJC_MSGSEND = YES; 178 | ENABLE_TESTABILITY = YES; 179 | GCC_C_LANGUAGE_STANDARD = c11; 180 | GCC_DYNAMIC_NO_PIC = NO; 181 | GCC_NO_COMMON_BLOCKS = YES; 182 | GCC_OPTIMIZATION_LEVEL = 0; 183 | GCC_PREPROCESSOR_DEFINITIONS = ( 184 | "DEBUG=1", 185 | "$(inherited)", 186 | ); 187 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 188 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 189 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 190 | GCC_WARN_UNDECLARED_SELECTOR = YES; 191 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 192 | GCC_WARN_UNUSED_FUNCTION = YES; 193 | GCC_WARN_UNUSED_VARIABLE = YES; 194 | MACOSX_DEPLOYMENT_TARGET = 10.10; 195 | MTL_ENABLE_DEBUG_INFO = YES; 196 | ONLY_ACTIVE_ARCH = YES; 197 | SDKROOT = macosx; 198 | }; 199 | name = Debug; 200 | }; 201 | F51352EF1A80FB42002E199C /* Release */ = { 202 | isa = XCBuildConfiguration; 203 | buildSettings = { 204 | ALWAYS_SEARCH_USER_PATHS = NO; 205 | CLANG_CXX_LANGUAGE_STANDARD = "c++17"; 206 | CLANG_CXX_LIBRARY = "libc++"; 207 | CLANG_ENABLE_MODULES = YES; 208 | CLANG_ENABLE_OBJC_ARC = YES; 209 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 210 | CLANG_WARN_BOOL_CONVERSION = YES; 211 | CLANG_WARN_COMMA = YES; 212 | CLANG_WARN_CONSTANT_CONVERSION = YES; 213 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 214 | CLANG_WARN_EMPTY_BODY = YES; 215 | CLANG_WARN_ENUM_CONVERSION = YES; 216 | CLANG_WARN_INFINITE_RECURSION = YES; 217 | CLANG_WARN_INT_CONVERSION = YES; 218 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 219 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 220 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 221 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 222 | CLANG_WARN_STRICT_PROTOTYPES = YES; 223 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 224 | CLANG_WARN_UNREACHABLE_CODE = YES; 225 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 226 | COPY_PHASE_STRIP = YES; 227 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 228 | ENABLE_NS_ASSERTIONS = NO; 229 | ENABLE_STRICT_OBJC_MSGSEND = YES; 230 | GCC_C_LANGUAGE_STANDARD = c11; 231 | GCC_NO_COMMON_BLOCKS = YES; 232 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 233 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 234 | GCC_WARN_UNDECLARED_SELECTOR = YES; 235 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 236 | GCC_WARN_UNUSED_FUNCTION = YES; 237 | GCC_WARN_UNUSED_VARIABLE = YES; 238 | MACOSX_DEPLOYMENT_TARGET = 10.10; 239 | MTL_ENABLE_DEBUG_INFO = NO; 240 | SDKROOT = macosx; 241 | }; 242 | name = Release; 243 | }; 244 | F51352F11A80FB42002E199C /* Debug */ = { 245 | isa = XCBuildConfiguration; 246 | buildSettings = { 247 | CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; 248 | GCC_C_LANGUAGE_STANDARD = c11; 249 | PRODUCT_NAME = LinkMapAnalyzer; 250 | }; 251 | name = Debug; 252 | }; 253 | F51352F21A80FB42002E199C /* Release */ = { 254 | isa = XCBuildConfiguration; 255 | buildSettings = { 256 | CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; 257 | GCC_C_LANGUAGE_STANDARD = c11; 258 | PRODUCT_NAME = LinkMapAnalyzer; 259 | }; 260 | name = Release; 261 | }; 262 | /* End XCBuildConfiguration section */ 263 | 264 | /* Begin XCConfigurationList section */ 265 | F51352E41A80FB42002E199C /* Build configuration list for PBXProject "LinkMapAnalyzer" */ = { 266 | isa = XCConfigurationList; 267 | buildConfigurations = ( 268 | F51352EE1A80FB42002E199C /* Debug */, 269 | F51352EF1A80FB42002E199C /* Release */, 270 | ); 271 | defaultConfigurationIsVisible = 0; 272 | defaultConfigurationName = Release; 273 | }; 274 | F51352F01A80FB42002E199C /* Build configuration list for PBXNativeTarget "LinkMapAnalyzer" */ = { 275 | isa = XCConfigurationList; 276 | buildConfigurations = ( 277 | F51352F11A80FB42002E199C /* Debug */, 278 | F51352F21A80FB42002E199C /* Release */, 279 | ); 280 | defaultConfigurationIsVisible = 0; 281 | defaultConfigurationName = Release; 282 | }; 283 | /* End XCConfigurationList section */ 284 | }; 285 | rootObject = F51352E11A80FB42002E199C /* Project object */; 286 | } 287 | -------------------------------------------------------------------------------- /LinkMapAnalyzer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /LinkMapAnalyzer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /LinkMapAnalyzer.xcodeproj/project.xcworkspace/xcuserdata/miaoyou.gmy.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/778477/iOS-LinkMapAnalyzer/fc9920d8643c656645415ec0561e2411b0587c4c/LinkMapAnalyzer.xcodeproj/project.xcworkspace/xcuserdata/miaoyou.gmy.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /LinkMapAnalyzer.xcodeproj/xcshareddata/xcschemes/LinkMapAnalyzer.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /LinkMapAnalyzer.xcodeproj/xcuserdata/miaoyou.gmy.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | LinkMapAnalyzer.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | LinkMapAnalyzer.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | F51352E81A80FB42002E199C 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## 为什么要做包瘦身? 3 | 4 | [Submitting the App to App Review](https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/SubmittingTheApp.html) 5 | 6 | >Your app’s total uncompressed size must be less than 4GB. Each Mach-O executable file (for example, > app_name.app/app_name) must not exceed these limits: 7 | 8 | >For apps whose MinimumOSVersion is less than 7.0: maximum of 80 MB for the total of all __TEXT sections in the binary. 9 | 10 | >For apps whose MinimumOSVersion is 7.x through 8.x: maximum of 60 MB per slice for the __TEXT section of each architecture slice in the binary. 11 | 12 | >For apps whose MinimumOSVersion is 9.0 or greater: maximum of 500 MB for the total of all __TEXT sections in the binary. 13 | 14 | [iOS 包瘦身浅析](http://778477.github.io/2016/09/01/2016-09-01-iOS%20%E5%8C%85%E7%98%A6%E8%BA%AB%E7%A0%94%E7%A9%B6/) 15 | 16 | 17 | ## How to use 18 | 19 | 使用项目目录里`LinkMapAnalyzer`可执行文件,在命令行中运行。 20 | 后面指明要分析的linkMap文件地址 21 | 22 | `./LinkMapAnalyzer ./GAG-LinkMap-normal-x86_64.txt` 23 | 24 | 也可以将输出重定向保存为其他文件 如: 25 | 26 | `./LinkMapAnalyzer ./GAG-LinkMap-normal-x86_64.txt > out.txt` 27 | 28 | 29 | ## Example output: 30 | 31 | ``` 32 | libAFNetworking.a 317.37KB 33 | libSDWebImage.a 198.61KB 34 | GAG 68.55KB 35 | libSVPullToRefresh.a 43.76KB 36 | libarclite_iphonesimulator.a 7.38KB 37 | unknownModule 2.18KB 38 | libPods-GAG.a 0.25KB 39 | ``` 40 | -------------------------------------------------------------------------------- /WORKSPACE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/778477/iOS-LinkMapAnalyzer/fc9920d8643c656645415ec0561e2411b0587c4c/WORKSPACE -------------------------------------------------------------------------------- /bazel_build.sh: -------------------------------------------------------------------------------- 1 | bazel build //iOS-LinkMapAnalyzer:LinkMapAnalyzer 2 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | Language: Cpp 3 | # BasedOnStyle: LLVM 4 | AccessModifierOffset: -2 5 | AlignAfterOpenBracket: AlwaysBreak 6 | AlignConsecutiveAssignments: false 7 | AlignConsecutiveDeclarations: false 8 | AlignEscapedNewlines: Right 9 | AlignOperands: false 10 | AlignTrailingComments: true 11 | AllowAllParametersOfDeclarationOnNextLine: true 12 | AllowShortBlocksOnASingleLine: false 13 | AllowShortCaseLabelsOnASingleLine: false 14 | AllowShortFunctionsOnASingleLine: All 15 | AllowShortIfStatementsOnASingleLine: false 16 | AllowShortLoopsOnASingleLine: false 17 | AlwaysBreakAfterDefinitionReturnType: None 18 | AlwaysBreakAfterReturnType: None 19 | AlwaysBreakBeforeMultilineStrings: false 20 | AlwaysBreakTemplateDeclarations: MultiLine 21 | BinPackArguments: false 22 | BinPackParameters: false 23 | BraceWrapping: 24 | AfterClass: false 25 | AfterControlStatement: false 26 | AfterEnum: false 27 | AfterFunction: false 28 | AfterNamespace: false 29 | AfterObjCDeclaration: false 30 | AfterStruct: false 31 | AfterUnion: false 32 | AfterExternBlock: false 33 | BeforeCatch: false 34 | BeforeElse: false 35 | IndentBraces: false 36 | SplitEmptyFunction: true 37 | SplitEmptyRecord: true 38 | SplitEmptyNamespace: true 39 | BreakBeforeBinaryOperators: None 40 | BreakBeforeBraces: Attach 41 | BreakBeforeInheritanceComma: false 42 | BreakInheritanceList: BeforeColon 43 | BreakBeforeTernaryOperators: true 44 | BreakConstructorInitializersBeforeComma: false 45 | BreakConstructorInitializers: BeforeColon 46 | BreakAfterJavaFieldAnnotations: true 47 | BreakStringLiterals: true 48 | ColumnLimit: 100 49 | CommentPragmas: '^ IWYU pragma:' 50 | CompactNamespaces: false 51 | ConstructorInitializerAllOnOneLineOrOnePerLine: false 52 | ConstructorInitializerIndentWidth: 4 53 | ContinuationIndentWidth: 4 54 | Cpp11BracedListStyle: true 55 | DerivePointerAlignment: false 56 | DisableFormat: false 57 | ExperimentalAutoDetectBinPacking: false 58 | FixNamespaceComments: true 59 | ForEachMacros: 60 | - foreach 61 | - Q_FOREACH 62 | - BOOST_FOREACH 63 | IncludeBlocks: Preserve 64 | IncludeCategories: 65 | - Regex: '^"(llvm|llvm-c|clang|clang-c)/' 66 | Priority: 2 67 | - Regex: '^(<|"(gtest|gmock|isl|json)/)' 68 | Priority: 3 69 | - Regex: '.*' 70 | Priority: 1 71 | IncludeIsMainRegex: '(Test)?$' 72 | IndentCaseLabels: true 73 | IndentPPDirectives: None 74 | IndentWidth: 4 75 | IndentWrappedFunctionNames: false 76 | JavaScriptQuotes: Leave 77 | JavaScriptWrapImports: true 78 | KeepEmptyLinesAtTheStartOfBlocks: true 79 | MacroBlockBegin: '' 80 | MacroBlockEnd: '' 81 | MaxEmptyLinesToKeep: 1 82 | NamespaceIndentation: None 83 | ObjCBinPackProtocolList: Auto 84 | ObjCBlockIndentWidth: 4 85 | ObjCSpaceAfterProperty: false 86 | ObjCSpaceBeforeProtocolList: true 87 | PenaltyBreakAssignment: 2 88 | PenaltyBreakBeforeFirstCallParameter: 19 89 | PenaltyBreakComment: 300 90 | PenaltyBreakFirstLessLess: 120 91 | PenaltyBreakString: 1000 92 | PenaltyBreakTemplateDeclaration: 10 93 | PenaltyExcessCharacter: 1000000 94 | PenaltyReturnTypeOnItsOwnLine: 60 95 | PointerAlignment: Right 96 | ReflowComments: true 97 | SortIncludes: true 98 | SortUsingDeclarations: true 99 | SpaceAfterCStyleCast: false 100 | SpaceAfterTemplateKeyword: true 101 | SpaceBeforeAssignmentOperators: true 102 | SpaceBeforeCpp11BracedList: false 103 | SpaceBeforeCtorInitializerColon: true 104 | SpaceBeforeInheritanceColon: true 105 | SpaceBeforeParens: ControlStatements 106 | SpaceBeforeRangeBasedForLoopColon: true 107 | SpaceInEmptyParentheses: false 108 | SpacesBeforeTrailingComments: 3 109 | SpacesInAngles: false 110 | SpacesInContainerLiterals: true 111 | SpacesInCStyleCastParentheses: false 112 | SpacesInParentheses: false 113 | SpacesInSquareBrackets: false 114 | Standard: Cpp11 115 | StatementMacros: 116 | - Q_UNUSED 117 | - QT_REQUIRE_VERSION 118 | TabWidth: 4 119 | UseTab: Always 120 | ... 121 | 122 | --- 123 | Language: Proto 124 | # Don't format .proto files. 125 | DisableFormat: true 126 | ... 127 | 128 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/BUILD: -------------------------------------------------------------------------------- 1 | load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") 2 | 3 | cc_binary( 4 | name = "LinkMapAnalyzer", 5 | srcs = ["main.cpp"], 6 | deps = [ 7 | ":LinkMapAnalyzerModule", 8 | ] 9 | ) 10 | 11 | cc_library( 12 | name = "LinkMapAnalyzerModule", 13 | srcs = ["LinkMapAnalyzer.cpp"], 14 | hdrs = ["ObjectFile.h", "ObjectModule.h", "LinkMapSessionDefine.h", "LinkMapAnalyzer.h", "Debug.h", "Common.h"], 15 | ) -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/Common.h: -------------------------------------------------------------------------------- 1 | // 2 | // Common.h 3 | // LinkMapAnalyzer 4 | // 5 | // Created by miaoyou.gmy on 2016/12/30. 6 | // Copyright © 2016年 miaoyou.gmy. All rights reserved. 7 | // 8 | 9 | #ifndef Common_h 10 | #define Common_h 11 | 12 | #define MAX(a, b) \ 13 | ({ \ 14 | __typeof__(a) _a = a; \ 15 | __typeof__(b) _b = b; \ 16 | _a > _b ? _a : _b; \ 17 | }) 18 | 19 | #define MIN(a, b) \ 20 | ({ \ 21 | __typeof__(a) _a = a; \ 22 | __typeof__(b) _b = b; \ 23 | _a < _b ? _a : _b; \ 24 | }) 25 | 26 | #include 27 | using namespace std; 28 | typedef long long _int64; 29 | string const _unkown_file_name = "unknownFile"; 30 | string const _unkown_module_name = "unknownModule"; 31 | 32 | #endif /* Common_h */ 33 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/Debug.h: -------------------------------------------------------------------------------- 1 | // 2 | // Debug.h 3 | // LinkMapAnalyzer 4 | // 5 | // Created by miaoyou.gmy on 2016/12/30. 6 | // Copyright © 2016年 miaoyou.gmy. All rights reserved. 7 | // 8 | 9 | #ifndef Debug_h 10 | #define Debug_h 11 | 12 | /** 13 | debug 开关 14 | 注释该宏定义 15 | 1. 取消重定向输入in.txt 16 | 2. 取消打印各个方法日志 17 | */ 18 | 19 | //#define _debug_ 1 20 | 21 | #endif /* Debug_h */ 22 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/LinkMapAnalyzer.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // linkMapAnalyzer.cpp 3 | // LinkMapAnalyzer 4 | // 5 | // Created by miaoyou.gmy on 2016/12/30. 6 | // Copyright © 2016年 miaoyou.gmy. All rights reserved. 7 | // 8 | 9 | #include "LinkMapAnalyzer.h" 10 | 11 | #include 12 | using namespace std; 13 | 14 | /** 15 | * IO 按行读入buf,分析当前行所在段落意义 16 | * 17 | * @param buf 当前行 内容 18 | * @param preType 上一段落意义 19 | * 20 | * @return 当前行段落意义 21 | */ 22 | LinkMapSessionType 23 | LinkMapAnalyzer::checkLinkMapSession(const char *buf, const LinkMapSessionType preType) { 24 | if (buf[0] != '#') 25 | return linkMapUndefine; 26 | if (strstr(buf, "# Path") != NULL) 27 | return linkMapPath; 28 | if (strstr(buf, "# Arch") != NULL) 29 | return linkMapArch; 30 | if (strstr(buf, "# Object") != NULL) 31 | return linkMapObjectFiles; 32 | if (strstr(buf, "# Sections") != NULL) 33 | return linkMapSections; 34 | if (strstr(buf, "# Symbols") != NULL) 35 | return linkMapSymbols; 36 | if (strstr(buf, "# Address") != NULL) { 37 | if (preType == linkMapSections) 38 | return linkMapSectionAddress; 39 | 40 | if (preType == linkMapSymbols) 41 | return linkMapSymbolAddress; 42 | } 43 | return linkMapUndefine; 44 | } 45 | 46 | /** 47 | * IO 按行读入buf,分析当前行包含的符号文件信息 48 | * 49 | * @param buf 当前行 内容 50 | * @param targetName 编译项目名称 51 | * 52 | * @return 符号文件信息 53 | */ 54 | ObjectFile *LinkMapAnalyzer::analyzeObjectFileFromBuf(const char *buf, const string targetName) { 55 | ObjectFile *ofile = new ObjectFile(); 56 | size_t len = strlen(buf); 57 | unsigned no = 0; 58 | bool hasNo = false; 59 | 60 | // 1.analyze get the file's number 61 | for (unsigned i = 1; i < len; i++) { 62 | if (buf[i] >= '0' && buf[i] <= '9') { 63 | no = no * 10 + (buf[i] - '0'); 64 | hasNo = true; 65 | } else if (hasNo) { 66 | break; 67 | } 68 | } 69 | ofile->fileNo = no; 70 | 71 | // 2. find the file's name 72 | if (buf[len - 1] == ')') { 73 | char *p = index(buf, '('); 74 | size_t pLen = strlen(p); 75 | ++p; 76 | p[pLen - 2] = '\0'; 77 | ofile->fileName = p; 78 | 79 | // 3. find the file's module name 80 | char *s = rindex(buf, '/'); 81 | size_t sLen = strlen(s); 82 | ++s; 83 | s[sLen - pLen] = '\0'; 84 | ofile->belongModule = s; 85 | } else { 86 | char *p = rindex(buf, '/'); 87 | if (p != NULL) { 88 | ofile->fileName = ++p; 89 | ofile->belongModule = targetName; // 3. set the default module name(build target name) 90 | } 91 | } 92 | 93 | objectFiles.push_back(ofile); 94 | return ofile; 95 | } 96 | /** 97 | * 生成 符号文件所在的模块 98 | */ 99 | void LinkMapAnalyzer::generateObjectModules() { 100 | for_each(objectFiles.begin(), objectFiles.end(), [&](const ObjectFile *file) { 101 | if (objectModulesMap.find(file->belongModule) == objectModulesMap.end()) { 102 | objectModules.push_back(new ObjectModule(file->belongModule, 0)); 103 | objectModulesMap[file->belongModule] = objectModules.size() - 1; 104 | } 105 | }); 106 | } 107 | /** 108 | * 按行读入buf,分析当前行包含的符号地址信息 - 计算符号文件大小 109 | * 110 | * @param buf 当前行 内容 111 | */ 112 | void LinkMapAnalyzer::analyzeSymbolsAddressFromBuf(const char *buf) { 113 | _int64 starAdd = 0, symSize = 0, no = 0; 114 | sscanf(buf, "%llx\t%llx\t", &starAdd, &symSize); 115 | char *p = index(buf, '['); 116 | bool hasno = false; 117 | 118 | while (p++) { 119 | if (*p >= '0' && *p <= '9') { 120 | hasno = true; 121 | no = no * 10 + (*p - '0'); 122 | } else if (hasno) { 123 | break; 124 | } 125 | } 126 | 127 | SymoblCountSize[no] += symSize; 128 | } 129 | 130 | /** 131 | * 输出 分析结果 132 | */ 133 | void LinkMapAnalyzer::output() { 134 | _int64 totalSize = 0; 135 | 136 | // 按照大小顺序打印.o大小 137 | cout << "[-] Object File Size : " << endl; 138 | sort(objectFiles.begin(), objectFiles.end(), [&](const ObjectFile *a, const ObjectFile *b) { 139 | return SymoblCountSize[a->fileNo] > SymoblCountSize[b->fileNo]; 140 | }); 141 | for_each(objectFiles.begin(), objectFiles.end(), [&](const ObjectFile *file) { 142 | if (SymoblCountSize[file->fileNo]) { 143 | totalSize += SymoblCountSize[file->fileNo]; 144 | objectModules[objectModulesMap[file->belongModule]]->moduleSize += 145 | SymoblCountSize[file->fileNo]; 146 | formatoutput(file->fileName, SymoblCountSize[file->fileNo] * 1.0 / 1024, "KB"); 147 | } 148 | }); 149 | // 按照大小顺序打印.a大小 150 | cout << "\n\n\n" 151 | << "[-] Library File Size : " << endl; 152 | sort( 153 | objectModules.begin(), 154 | objectModules.end(), 155 | [](const ObjectModule *a, const ObjectModule *b) { return a->moduleSize > b->moduleSize; }); 156 | 157 | totalSize = 0; 158 | for_each(objectModules.begin(), objectModules.end(), [&](const ObjectModule *module) { 159 | formatoutput(module->moduleName, module->moduleSize * 1.0 / 1024, "KB"); 160 | totalSize += module->moduleSize; 161 | }); 162 | 163 | cout << "\n\n\n" 164 | << "[-] totalSize : " << totalSize * 1.0 / (1024 * 1024) << "MB" << endl; 165 | } 166 | 167 | /** 168 | * 格式化 输出 169 | */ 170 | void LinkMapAnalyzer::formatoutput(const string name, double size, const string sizeUnit) { 171 | const long limLen = 80; 172 | char *sizeStr = (char *)malloc(sizeof(char) * 1024); 173 | memset(sizeStr, '\0', sizeof(char) * 1024); 174 | sprintf(sizeStr, "%.2lf", size); 175 | long spaceLen = limLen - name.size() - strlen(sizeStr) - sizeUnit.size(); 176 | 177 | cout << name; 178 | for (int i = 0; i < spaceLen; i++) { 179 | cout << " "; 180 | } 181 | cout << sizeStr << sizeUnit << endl; 182 | 183 | free(sizeStr); 184 | } 185 | 186 | #pragma mark - Debug output 187 | /** 188 | * 检查是否存在未知模块 189 | */ 190 | void LinkMapAnalyzer::ckeckUnkownObjectFile() { 191 | for_each(objectFiles.begin(), objectFiles.end(), [&](const ObjectFile *file) { 192 | if (file->fileName == _unkown_file_name || file->belongModule == _unkown_module_name) { 193 | cout << "[debug]: " << file->fileNo << "-" << file->fileName << "-" 194 | << file->belongModule << endl; 195 | } 196 | }); 197 | } 198 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/LinkMapAnalyzer.h: -------------------------------------------------------------------------------- 1 | // 2 | // linkMapAnalyzer.hpp 3 | // LinkMapAnalyzer 4 | // 5 | // Created by miaoyou.gmy on 2016/12/30. 6 | // Copyright © 2016年 miaoyou.gmy. All rights reserved. 7 | // 8 | 9 | #ifndef LinkMapAnalyzer_h 10 | #define LinkMapAnalyzer_h 11 | 12 | #include 13 | #include 14 | /* STL */ 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | 22 | #include "LinkMapSessionDefine.h" 23 | #include "ObjectFile.h" 24 | #include "ObjectModule.h" 25 | using namespace std; 26 | 27 | class LinkMapAnalyzer { 28 | public: 29 | vector objectFiles{4096}; // 装载 符号文件(.o file) 容器 30 | _int64 *SymoblCountSize; // 符号文件size大小 index: file's number val: file's Size 31 | map 32 | objectModulesMap; // 所属模块map hashKey: module's name hashVal: module' index 33 | vector objectModules{}; // 装载 符号文件(.o file)对应的所属模块 容器 34 | 35 | LinkMapAnalyzer() { objectFiles.clear(); } 36 | ~LinkMapAnalyzer() { free(SymoblCountSize); } 37 | 38 | LinkMapSessionType checkLinkMapSession(const char *buf, const LinkMapSessionType preType); 39 | ObjectFile *analyzeObjectFileFromBuf(const char *buf, const string targetName); 40 | void ckeckUnkownObjectFile(); 41 | void generateObjectModules(); 42 | void analyzeSymbolsAddressFromBuf(const char *buf); 43 | void output(); 44 | 45 | private: 46 | void formatoutput(const string name, double size, const string sizeUnit); 47 | }; 48 | 49 | #endif /* linkMapAnalyzer_h */ 50 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/LinkMapSessionDefine.h: -------------------------------------------------------------------------------- 1 | // 2 | // LinkMapSessionDefine.h 3 | // LinkMapAnalyzer 4 | // 5 | // Created by miaoyou.gmy on 2016/12/30. 6 | // Copyright © 2016年 miaoyou.gmy. All rights reserved. 7 | // 8 | 9 | #ifndef LinkMapSessionDefine_h 10 | #define LinkMapSessionDefine_h 11 | 12 | typedef enum { 13 | linkMapUndefine = 0, // 起始未定义 14 | linkMapPath = 10, // 文件路径 # Path 15 | linkMapArch, // cpu架构 # Arch 16 | linkMapObjectFiles, // 编译文件 # Object files 17 | linkMapSections, // 编译段落 # Sections 18 | linkMapSectionAddress, // 段落地址,大小 # Address Size Segment Section 19 | linkMapSymbols, // 编译符号 # Symbols 20 | linkMapSymbolAddress, // 编译符号地址,大小 # Address Size File Name 21 | } LinkMapSessionType; 22 | 23 | #endif /* LinkMapSessionDefine_h */ 24 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/Makefile: -------------------------------------------------------------------------------- 1 | CXX = clang++ 2 | CXXFLAGS = -target x86_64-apple-macos10.10 -std=c++11 3 | OBJECTS = LinkMapAnalyzer.o main.o 4 | 5 | LinkMapAnalyzer : $(OBJECTS) 6 | $(CXX) $(CXXFLAGS) $(OBJECTS) -o $@ 7 | 8 | LinkMapAnalyzer.o : LinkMapAnalyzer.cpp 9 | $(CXX) $(CXXFLAGS) -c $< -o $@ 10 | 11 | main.o : main.cpp 12 | $(CXX) $(CXXFLAGS) -c $< -o $@ 13 | 14 | clean: 15 | rm $(OBJECTS) LinkMapAnalyzer 16 | 17 | format: 18 | clang-format -i *.cpp *.h -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/ObjectFile.h: -------------------------------------------------------------------------------- 1 | // 2 | // ObjectFile.h 3 | // LinkMapAnalyzer 4 | // 5 | // Created by miaoyou.gmy on 2016/12/30. 6 | // Copyright © 2016年 miaoyou.gmy. All rights reserved. 7 | // 8 | 9 | #ifndef ObjectFile_h 10 | #define ObjectFile_h 11 | 12 | #include "Common.h" 13 | 14 | class ObjectFile { 15 | public: 16 | string fileName; // 文件名字 17 | string belongModule; // 所属模块 18 | unsigned fileNo; // 文件编号 19 | 20 | ObjectFile() { 21 | fileName = _unkown_file_name; 22 | belongModule = _unkown_module_name; 23 | fileNo = 0; 24 | } 25 | 26 | ObjectFile(string _fileName, string _belongModule, unsigned _no) { 27 | fileName = _fileName; 28 | belongModule = _belongModule; 29 | fileNo = _no; 30 | } 31 | }; 32 | 33 | #endif /* ObjectFile_h */ 34 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/ObjectModule.h: -------------------------------------------------------------------------------- 1 | // 2 | // ObjectModule.h 3 | // LinkMapAnalyzer 4 | // 5 | // Created by miaoyou.gmy on 2016/12/30. 6 | // Copyright © 2016年 miaoyou.gmy. All rights reserved. 7 | // 8 | 9 | #ifndef ObjectModule_h 10 | #define ObjectModule_h 11 | 12 | #include "Common.h" 13 | 14 | class ObjectModule { 15 | public: 16 | string moduleName; 17 | _int64 moduleSize; 18 | ObjectModule() { 19 | moduleName = _unkown_module_name; 20 | moduleSize = 0; 21 | } 22 | 23 | ObjectModule(string _moduleName, _int64 size = 0) { 24 | moduleName = _moduleName; 25 | moduleSize = size; 26 | } 27 | }; 28 | 29 | #endif /* ObjectModule_h */ 30 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/main.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // main.cpp 3 | // 4 | // Created by miaoyou.gmy on 15/2/N. 5 | // Copyright (c) 2015年 miaoyou.gmy. All rights reserved. 6 | // 7 | 8 | /* base */ 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | /* IO */ 15 | #include "Debug.h" 16 | #include "LinkMapAnalyzer.h" 17 | #include 18 | #include 19 | using namespace std; 20 | const unsigned BUFMAXLEN(1024 * 10); // IO 读入缓冲区大小 21 | /* 22 | # Path: LinkMap文件所在的目录 23 | # Arch: 编译构建的 cpu架构(指令集) 24 | 25 | step 1: 26 | # Count Object Files: 27 | 开始 记录 类(class - .o) 对应的文件编号 和 所属的模块(.a/.framework) 28 | 29 | step 2: 30 | # generate Module Map 31 | 生成 target project中编译构建所引用的所有模块 32 | 33 | step 3: 34 | # analyze Symbols Address 35 | 分析 符号地址 计算对应的符号文件大小 36 | 37 | step 4: 38 | # generate Module Size 39 | 遍历生成 所有模块的大小 顺序输出 40 | */ 41 | 42 | int main(int argc, char *argv[]) { 43 | LinkMapAnalyzer *analyazer = new LinkMapAnalyzer(); 44 | 45 | clock_t beginTime = clock(); 46 | 47 | #ifndef _debug_ 48 | if (argc < 2) { 49 | cout << "Please give a LinkMap file path.\n[ex. ./LinkMapAnalyzer " 50 | "~/Library/xx-LinkMap-normal-x86_64.txt]" 51 | << endl; 52 | return 0; 53 | } 54 | ifstream inFile(argv[1]); 55 | #else 56 | //输入 重定向 load linkMap file 57 | const string inputFileName = 58 | "/Users/guomiaoyou/Documents/github/iOS-LinkMapAnalyzer/iOS-LinkMapAnalyzer/in.txt"; 59 | ifstream inFile(inputFileName); 60 | //输出 重定向 61 | freopen( 62 | "/Users/guomiaoyou/Documents/github/iOS-LinkMapAnalyzer/iOS-LinkMapAnalyzer/out.txt", 63 | "w", 64 | stdout); 65 | #endif 66 | 67 | if (!inFile) { 68 | cout << "open linkMap file failed..." << endl; 69 | return 0; 70 | } 71 | 72 | char buf[BUFMAXLEN] = {'\0'}; 73 | string target = _unkown_module_name; 74 | LinkMapSessionType type = linkMapUndefine; 75 | _int64 lineCnt = 0; 76 | while (inFile.getline(buf, BUFMAXLEN - 1, '\n')) { 77 | LinkMapSessionType currentType = analyazer->checkLinkMapSession(buf, type); 78 | if (currentType != linkMapUndefine) 79 | type = currentType; 80 | lineCnt++; 81 | 82 | switch (type) { 83 | case linkMapPath: { 84 | #ifdef _debug_ 85 | printf("%s\n", buf); 86 | #endif 87 | char *p = rindex(buf, '/'); 88 | ++p; 89 | target = p; 90 | break; 91 | } 92 | case linkMapArch: 93 | #ifdef _debug_ 94 | printf("%s\n", buf); 95 | #endif 96 | break; 97 | case linkMapObjectFiles: 98 | if (currentType == linkMapUndefine) { 99 | analyazer->analyzeObjectFileFromBuf(buf, target); 100 | } 101 | break; 102 | case linkMapSections: { 103 | #ifdef _debug_ 104 | analyazer->ckeckUnkownObjectFile(); 105 | #endif 106 | analyazer->generateObjectModules(); 107 | analyazer->SymoblCountSize = 108 | (_int64 *)malloc(sizeof(_int64) * analyazer->objectFiles.size() + 1); 109 | memset( 110 | analyazer->SymoblCountSize, 111 | 0, 112 | sizeof(_int64) * analyazer->objectFiles.size() + 1); 113 | break; 114 | } 115 | case linkMapSymbolAddress: 116 | if (currentType == linkMapUndefine) { 117 | analyazer->analyzeSymbolsAddressFromBuf(buf); 118 | } 119 | 120 | break; 121 | default: 122 | break; 123 | } 124 | } 125 | #ifdef _debug_ 126 | cout << "[debug]: read file line count = " << lineCnt << endl; 127 | #endif 128 | analyazer->output(); 129 | delete analyazer; 130 | 131 | clock_t endTime = clock(); 132 | cout << "[-] Cast Time : " << (endTime - beginTime) / 1000 << endl; 133 | 134 | inFile.close(); 135 | return 0; 136 | } 137 | -------------------------------------------------------------------------------- /iOS-LinkMapAnalyzer/out.txt: -------------------------------------------------------------------------------- 1 | # Path: /Users/nickolas/Library/Developer/Xcode/DerivedData/EdgeComputingiOS-ehnpnqfmpvojhzbuewujcqccsfcq/Build/Products/Release-iphonesimulator/EdgeComputingiOS.framework/EdgeComputingiOS 2 | # Arch: x86_64 3 | [debug]: 0-unknownFile-unknownModule 4 | [debug]: read file line count = 48107 5 | 6 | 7 | 8 | [-] Object File Size : 9 | conv_ops.o 213.90KB 10 | matmul_op.o 170.80KB 11 | test_log.pb.o 160.14KB 12 | meta_graph.pb.o 144.44KB 13 | tensor_bundle.o 128.98KB 14 | descriptor.o 128.57KB 15 | descriptor.pb.o 112.84KB 16 | math_grad.o 85.77KB 17 | feature.pb.o 79.98KB 18 | tensor.o 79.53KB 19 | config.pb.o 78.60KB 20 | unknownFile 67.91KB 21 | direct_session.o 66.67KB 22 | function.o 65.37KB 23 | transpose_functor_cpu.o 60.75KB 24 | tensor_slice_reader.o 56.65KB 25 | executor.o 55.70KB 26 | graph_transfer_info.pb.o 55.21KB 27 | cwise_op_add_1.o 49.78KB 28 | step_stats.pb.o 44.75KB 29 | op_performance_data.pb.o 44.39KB 30 | layout_optimizer.o 43.92KB 31 | queue_base.o 43.24KB 32 | cluster.pb.o 42.42KB 33 | config.pb_text.o 42.10KB 34 | array_grad.o 40.94KB 35 | summary.pb.o 40.30KB 36 | graph_transfer_info.pb_text.o 39.55KB 37 | op_def.pb.o 39.23KB 38 | op_def_util.o 39.22KB 39 | generated_message_reflection.o 38.60KB 40 | padding_fifo_queue.o 38.31KB 41 | function.o 37.96KB 42 | attr_value.pb.o 37.06KB 43 | concat_lib_cpu.o 36.71KB 44 | graph_constructor.o 36.63KB 45 | text_format.o 35.91KB 46 | graph_partition.o 35.41KB 47 | log_memory.pb.o 35.41KB 48 | attr_value.pb_text.o 33.92KB 49 | device_properties.pb.o 33.20KB 50 | shape_inference.o 32.99KB 51 | function.pb.o 32.41KB 52 | extension_set.o 30.96KB 53 | mirror_pad_op_cpu_impl_5.o 30.73KB 54 | tile_ops_cpu_impl_1.o 30.71KB 55 | attr_value_util.o 30.50KB 56 | example_proto_fast_parsing.o 29.98KB 57 | saved_tensor_slice.pb.o 29.61KB 58 | cost_graph.pb.o 29.61KB 59 | node_def.pb.o 29.48KB 60 | tile_ops_cpu_impl_7.o 29.03KB 61 | tile_ops_cpu_impl_5.o 28.72KB 62 | tile_ops_cpu_impl_6.o 27.92KB 63 | tile_ops_cpu_impl_4.o 27.38KB 64 | stat_summarizer.o 27.33KB 65 | quantize_training.o 26.58KB 66 | mirror_pad_op_cpu_impl_4.o 26.35KB 67 | tile_ops_cpu_impl_2.o 26.26KB 68 | common_shape_fns.o 26.21KB 69 | spacetobatch_functor.o 26.09KB 70 | event.pb.o 26.00KB 71 | strided_slice_op_inst_7.o 25.42KB 72 | simple_placer.o 25.37KB 73 | op_kernel.o 25.18KB 74 | feature.pb_text.o 25.02KB 75 | deep_conv2d.o 25.01KB 76 | mirror_pad_op_cpu_impl_3.o 24.83KB 77 | op_def_builder.o 24.67KB 78 | tensor.pb.o 24.38KB 79 | tile_ops_cpu_impl_3.o 24.35KB 80 | cast_op_impl_half.o 24.05KB 81 | cast_op_impl_float.o 23.39KB 82 | nn_grad.o 23.34KB 83 | costmodel.o 23.03KB 84 | strided_slice_op_inst_6.o 23.01KB 85 | cast_op_impl_complex128.o 22.71KB 86 | step_stats.pb_text.o 22.65KB 87 | op_def.pb_text.o 22.46KB 88 | fifo_queue.o 22.45KB 89 | cast_op_impl_complex64.o 22.34KB 90 | strided_slice_op_inst_5.o 22.27KB 91 | node_def_util.o 22.19KB 92 | cast_op_impl_bool.o 22.16KB 93 | cast_op_impl_int16.o 22.12KB 94 | hadoop_file_system.o 21.99KB 95 | cast_op_impl_int8.o 21.98KB 96 | cast_op_impl_int64.o 21.97KB 97 | cast_op_impl_uint16.o 21.93KB 98 | cast_op_impl_double.o 21.77KB 99 | cast_op_impl_int32.o 21.69KB 100 | cast_op_impl_uint8.o 21.60KB 101 | mirror_pad_op_cpu_impl_2.o 21.53KB 102 | strutil.o 21.03KB 103 | ECTaskManager.o 20.93KB 104 | bfc_allocator.o 20.87KB 105 | strided_slice_op_inst_4.o 20.75KB 106 | map_field.o 20.64KB 107 | cwise_op_mul_1.o 20.60KB 108 | strided_slice_op_inst_3.o 20.44KB 109 | summary.pb_text.o 20.08KB 110 | fill_functor.o 19.79KB 111 | bias_op.o 19.77KB 112 | mirror_pad_op_cpu_impl_1.o 19.06KB 113 | reduction_ops_sum.o 19.02KB 114 | message.o 18.95KB 115 | op.o 18.89KB 116 | variable.pb.o 18.78KB 117 | cost_graph.pb_text.o 18.47KB 118 | saved_tensor_slice.pb_text.o 17.98KB 119 | remote_fused_graph_execute_info.pb.o 17.70KB 120 | numbers.o 17.51KB 121 | log_memory.pb_text.o 17.35KB 122 | cwise_op_div.o 17.31KB 123 | strided_slice_op_inst_2.o 17.26KB 124 | env.o 16.74KB 125 | auto_parallel.o 16.61KB 126 | threadpool.o 16.47KB 127 | tile_ops.o 16.39KB 128 | graph.o 16.15KB 129 | tms_mapread.o 15.67KB 130 | wire_format.o 15.50KB 131 | kernel_def.pb.o 15.21KB 132 | strided_slice_op_inst_1.o 15.12KB 133 | tensor_shape.o 15.06KB 134 | tensor_bundle.pb.o 15.03KB 135 | function.pb_text.o 14.99KB 136 | shape_refiner.o 14.82KB 137 | debug.pb.o 14.55KB 138 | op_level_cost_estimator.o 14.54KB 139 | save_restore_tensor.o 14.51KB 140 | tensor.pb_text.o 13.72KB 141 | gradients.o 13.69KB 142 | tms_mapstore.o 13.57KB 143 | rewriter_config.pb.o 13.57KB 144 | scatter_nd_op_cpu_impl_1.o 13.55KB 145 | cluster.pb_text.o 13.47KB 146 | device_attributes.pb.o 13.24KB 147 | constant_folding.o 13.10KB 148 | resource_mgr.o 12.98KB 149 | descriptor_database.o 12.54KB 150 | example.pb.o 12.46KB 151 | tensor_slice.pb.o 11.65KB 152 | remote_fused_graph_execute_info.pb_text.o 11.65KB 153 | memory_types.o 11.54KB 154 | tensor_bundle.pb_text.o 11.48KB 155 | utils.o 11.36KB 156 | tensor_shape.pb.o 11.36KB 157 | memmapped_file_system.pb.o 11.24KB 158 | split_lib_cpu.o 11.18KB 159 | tensor_slice.o 11.12KB 160 | subgraph.o 10.95KB 161 | file_system.o 10.84KB 162 | example_proto_helper.o 10.80KB 163 | extension_set_heavy.o 10.66KB 164 | memory_optimizer.o 10.52KB 165 | rendezvous.o 10.43KB 166 | step_stats_collector.o 10.27KB 167 | tensor_slice_set.o 10.19KB 168 | partial_tensor_shape.o 10.08KB 169 | tokenizer.o 10.06KB 170 | queue_runner.pb.o 9.98KB 171 | analytical_cost_estimator.o 9.91KB 172 | graph_properties.o 9.91KB 173 | static_schedule.o 9.74KB 174 | simple_graph_execution_state.o 9.48KB 175 | grappler_item_builder.o 9.47KB 176 | virtual_scheduler.o 9.38KB 177 | graph.pb.o 9.19KB 178 | equal_graph_def.o 9.16KB 179 | device_set.o 9.14KB 180 | tensorflow_server.pb.o 9.13KB 181 | memmapped_file_system.o 9.05KB 182 | tensorflow_utils.o 9.03KB 183 | graph_runner.o 8.96KB 184 | wire_format_lite.o 8.89KB 185 | node_def_builder.o 8.79KB 186 | saver.pb.o 8.66KB 187 | constant_folding.o 8.66KB 188 | device_factory.o 8.56KB 189 | str_util.o 8.28KB 190 | histogram.o 8.27KB 191 | device_name_utils.o 8.20KB 192 | resource_handle.pb.o 8.01KB 193 | tensor_description.pb.o 8.01KB 194 | sendrecv_ops.o 7.89KB 195 | strided_slice_op.o 7.77KB 196 | scc.o 7.64KB 197 | arclite.o 7.56KB 198 | scatter_nd_op_cpu_impl_4.o 7.44KB 199 | scatter_nd_op_cpu_impl_2.o 7.39KB 200 | scatter_nd_op_cpu_impl_5.o 7.32KB 201 | versions.pb.o 7.30KB 202 | allocation_description.pb.o 7.29KB 203 | optimizer_cse.o 7.29KB 204 | scatter_nd_op_cpu_impl_3.o 7.29KB 205 | session_factory.o 7.28KB 206 | kernel_def.pb_text.o 7.09KB 207 | debug.pb_text.o 6.96KB 208 | logging.o 6.94KB 209 | named_tensor.pb.o 6.78KB 210 | device_mgr.o 6.64KB 211 | rewriter_config.pb_text.o 6.50KB 212 | reader_base.pb.o 6.47KB 213 | fake_input.o 6.45KB 214 | node_def.pb_text.o 6.39KB 215 | command_line_flags.o 6.39KB 216 | tensor_description.pb_text.o 6.37KB 217 | zero_copy_stream_impl_lite.o 6.27KB 218 | device_attributes.pb_text.o 6.09KB 219 | subprocess.o 5.95KB 220 | wav_io.o 5.94KB 221 | cancellation.o 5.88KB 222 | memmapped_file_system.pb_text.o 5.85KB 223 | ctc_loss_calculator.o 5.76KB 224 | array_ops.o 5.71KB 225 | graph_def_util.o 5.60KB 226 | tensor_shape.pb_text.o 5.59KB 227 | env.o 5.57KB 228 | saver.pb_text.o 5.52KB 229 | algorithm.o 5.52KB 230 | rendezvous_mgr.o 5.48KB 231 | load_library.o 5.47KB 232 | message_lite.o 5.35KB 233 | coded_stream.o 5.35KB 234 | zero_copy_stream_impl.o 5.34KB 235 | common.o 5.29KB 236 | tensor_slice.pb_text.o 5.27KB 237 | dynamic_message.o 5.18KB 238 | tensor_util.o 5.14KB 239 | example.pb_text.o 5.09KB 240 | copy_tensor.o 5.05KB 241 | ECConfig.o 5.04KB 242 | posix_file_system.o 4.99KB 243 | collection_registry.o 4.96KB 244 | tensor_array.o 4.95KB 245 | parallel_concat_optimizer.o 4.95KB 246 | reader_base.o 4.93KB 247 | unique_tensor_references.o 4.82KB 248 | graph_def_builder.o 4.73KB 249 | bcast.o 4.72KB 250 | tracking_allocator.o 4.58KB 251 | model_pruner.o 4.55KB 252 | crc32c.o 4.55KB 253 | utils.o 4.42KB 254 | meta_optimizer.o 4.27KB 255 | utils.o 4.23KB 256 | ECScheduleEvent.o 4.23KB 257 | session_state.o 4.19KB 258 | tensor_slice_reader_cache.o 4.17KB 259 | types.o 4.11KB 260 | net.o 4.03KB 261 | tensor_slice_writer.o 3.97KB 262 | log_memory.o 3.96KB 263 | concat_op.o 3.92KB 264 | pooling_ops_common.o 3.92KB 265 | node_builder.o 3.91KB 266 | gather_op.o 3.87KB 267 | reflection_ops.o 3.86KB 268 | weighted_picker.o 3.77KB 269 | graph.pb_text.o 3.77KB 270 | training_op_helpers.o 3.75KB 271 | ECScheduler.o 3.68KB 272 | any.pb.o 3.63KB 273 | measuring_cost_estimator.o 3.63KB 274 | structurally_valid.o 3.58KB 275 | slice_op_cpu_impl_5.o 3.53KB 276 | table_builder.o 3.51KB 277 | op_segment.o 3.34KB 278 | allocation_description.pb_text.o 3.34KB 279 | transpose_op.o 3.32KB 280 | split_op.o 3.32KB 281 | functional_grad.o 3.31KB 282 | unknown_field_set.o 3.31KB 283 | arena.o 3.30KB 284 | virtual_cluster.o 3.27KB 285 | constant_op.o 3.24KB 286 | path.o 3.21KB 287 | control_flow.o 3.20KB 288 | strided_slice_op_inst_0.o 3.18KB 289 | resource_handle.pb_text.o 3.17KB 290 | op_types.o 3.13KB 291 | versions.pb_text.o 3.08KB 292 | cwise_op_tanh.o 3.08KB 293 | resource_variable_read_optimizer.o 3.00KB 294 | cwise_op_sigmoid.o 2.98KB 295 | math_ops.o 2.98KB 296 | allocator_registry.o 2.97KB 297 | slice_op_cpu_impl_6.o 2.97KB 298 | libSystem.tbd 2.95KB 299 | slice_op_cpu_impl_7.o 2.94KB 300 | ECModelManager.o 2.94KB 301 | unpack_op.o 2.91KB 302 | slice_op_cpu_impl_4.o 2.91KB 303 | tms_sqlexecute.o 2.89KB 304 | kernel_def_builder.o 2.88KB 305 | grappler_item.o 2.86KB 306 | status.o 2.85KB 307 | robust_stats.o 2.85KB 308 | inputbuffer.o 2.78KB 309 | memmapped_file_system_writer.o 2.75KB 310 | saved_tensor_slice_util.o 2.70KB 311 | ECConfigManager.o 2.65KB 312 | strcat.o 2.61KB 313 | block.o 2.60KB 314 | conv_grad_ops.o 2.51KB 315 | identity_op.o 2.45KB 316 | buffered_inputstream.o 2.42KB 317 | cwise_op_sqrt.o 2.42KB 318 | stringpiece.o 2.42KB 319 | libc++.tbd 2.41KB 320 | cpu_info.o 2.41KB 321 | costmodel_manager.o 2.40KB 322 | cast_op.o 2.36KB 323 | versions.o 2.30KB 324 | cwise_op_square.o 2.25KB 325 | immutable_constant_op.o 2.20KB 326 | debugger_state_interface.o 2.19KB 327 | work_sharder.o 2.16KB 328 | control_flow_ops.o 2.15KB 329 | nn_ops.o 2.13KB 330 | graph_rewriter.o 2.10KB 331 | lookup_interface.o 2.10KB 332 | int128.o 2.09KB 333 | ordered_code.o 2.04KB 334 | block_builder.o 2.03KB 335 | arena.o 2.01KB 336 | table.o 1.93KB 337 | base64.o 1.92KB 338 | types.pb.o 1.92KB 339 | reshape_op.o 1.89KB 340 | ECTask.o 1.89KB 341 | device.o 1.89KB 342 | env_var.o 1.88KB 343 | renamed_device.o 1.87KB 344 | memory_types.o 1.87KB 345 | function_ops.o 1.86KB 346 | session.o 1.86KB 347 | allocator.o 1.85KB 348 | reduction_ops_common.o 1.83KB 349 | stringprintf.o 1.81KB 350 | format.o 1.78KB 351 | cwise_ops_common.o 1.75KB 352 | simple_philox.o 1.74KB 353 | util.o 1.67KB 354 | error_codes.pb.o 1.66KB 355 | slice_op_cpu_impl_2.o 1.65KB 356 | status.o 1.64KB 357 | tensor_array_ops.o 1.62KB 358 | topological_sort.o 1.58KB 359 | cast_op_impl_bfloat.o 1.55KB 360 | allocator_retry.o 1.51KB 361 | two_level_iterator.o 1.50KB 362 | group_iterator.o 1.48KB 363 | reverse_sequence_op.o 1.47KB 364 | virtual_placer.o 1.45KB 365 | tracing.o 1.43KB 366 | threadpool_device_factory.o 1.42KB 367 | substitute.o 1.41KB 368 | cpu_utils.o 1.40KB 369 | slice_op_cpu_impl_1.o 1.37KB 370 | coding.o 1.36KB 371 | graph_memory.o 1.36KB 372 | iterator.o 1.35KB 373 | cluster.o 1.31KB 374 | optimization_registry.o 1.31KB 375 | local_device.o 1.29KB 376 | distribution_sampler.o 1.27KB 377 | cpu_feature_guard.o 1.26KB 378 | any.o 1.24KB 379 | threadpool_device.o 1.20KB 380 | tensor_coding.o 1.17KB 381 | inplace_ops.o 1.14KB 382 | load_library.o 1.02KB 383 | random_inputstream.o 0.96KB 384 | device_base.o 0.96KB 385 | proto_text_util.o 0.95KB 386 | libobjc.tbd 0.94KB 387 | edgeset.o 0.92KB 388 | graph_optimizer.o 0.92KB 389 | types.pb_text.o 0.87KB 390 | random.o 0.87KB 391 | tensor_format.o 0.86KB 392 | ECLockHelper.o 0.83KB 393 | meta_support.o 0.83KB 394 | sendrecv_ops.o 0.82KB 395 | strtod.o 0.80KB 396 | port.o 0.78KB 397 | use_cudnn.o 0.74KB 398 | error.o 0.74KB 399 | bitmap.o 0.72KB 400 | guarded_philox_random.o 0.72KB 401 | clock_cycle_profiler.o 0.67KB 402 | stringprintf.o 0.66KB 403 | warn_about_ints.o 0.65KB 404 | stack_ops.o 0.61KB 405 | hash.o 0.60KB 406 | build_graph_options.o 0.59KB 407 | function_ops.o 0.59KB 408 | bfloat16.o 0.57KB 409 | ops_util.o 0.56KB 410 | no_op.o 0.55KB 411 | process_util.o 0.55KB 412 | zero_copy_stream.o 0.54KB 413 | mirror_pad_mode.o 0.49KB 414 | utils.o 0.49KB 415 | validate.o 0.47KB 416 | error_codes.pb_text.o 0.47KB 417 | padding.o 0.47KB 418 | inputstream_interface.o 0.44KB 419 | stringpiece.o 0.38KB 420 | protobuf_util.o 0.35KB 421 | libc++abi.tbd 0.33KB 422 | stats_publisher_interface.o 0.32KB 423 | generated_message_util.o 0.32KB 424 | env_time.o 0.30KB 425 | slice_op_cpu_impl_3.o 0.28KB 426 | repeated_field.o 0.28KB 427 | tensor_id.o 0.26KB 428 | no_op.o 0.24KB 429 | ECErrorDefine.o 0.22KB 430 | requantization_range_op.o 0.21KB 431 | atomicops_internals_x86_gcc.o 0.21KB 432 | scanner.o 0.21KB 433 | devices.o 0.20KB 434 | colors.o 0.19KB 435 | env_time.o 0.15KB 436 | tracing.o 0.14KB 437 | naming.o 0.12KB 438 | setround.o 0.12KB 439 | session_options.o 0.12KB 440 | tensor_reference.o 0.11KB 441 | version_info.o 0.10KB 442 | once.o 0.09KB 443 | CoreFoundation.tbd 0.07KB 444 | EdgeComputingiOS_vers.o 0.07KB 445 | protobuf.o 0.07KB 446 | denormal.o 0.05KB 447 | quantization_utils.o 0.05KB 448 | Foundation.tbd 0.05KB 449 | arenastring.o 0.04KB 450 | crc32c_accelerate.o 0.02KB 451 | port.o 0.02KB 452 | tracing.o 0.02KB 453 | sequence_ops.o 0.02KB 454 | quantize_down_and_shrink_range.o 0.01KB 455 | requantize.o 0.01KB 456 | training_ops.o 0.01KB 457 | string_ops.o 0.01KB 458 | state_ops.o 0.01KB 459 | sparse_ops.o 0.01KB 460 | quantized_reshape_op.o 0.01KB 461 | script_ops.o 0.01KB 462 | random_ops.o 0.01KB 463 | parsing_ops.o 0.01KB 464 | dequantize_op.o 0.01KB 465 | depthwise_conv_op.o 0.01KB 466 | aggregate_ops.o 0.01KB 467 | argmax_op.o 0.01KB 468 | avgpooling_op.o 0.01KB 469 | logging_ops.o 0.01KB 470 | linalg_ops.o 0.01KB 471 | io_ops.o 0.01KB 472 | image_ops.o 0.01KB 473 | functional_ops.o 0.01KB 474 | batch_norm_op.o 0.01KB 475 | bcast_ops.o 0.01KB 476 | data_flow_ops.o 0.01KB 477 | ctc_ops.o 0.01KB 478 | control_flow_ops.o 0.01KB 479 | candidate_sampling_ops.o 0.01KB 480 | check_numerics_op.o 0.01KB 481 | conv_grad_input_ops.o 0.01KB 482 | conv_grad_filter_ops.o 0.01KB 483 | spacetobatch_op.o 0.01KB 484 | batchtospace_op.o 0.01KB 485 | conv_ops_fused.o 0.01KB 486 | conv_ops_using_gemm.o 0.01KB 487 | crop_and_resize_op.o 0.01KB 488 | ctc_decoder_ops.o 0.01KB 489 | cwise_op_abs.o 0.01KB 490 | cwise_op_add_2.o 0.01KB 491 | cwise_op_equal_to_1.o 0.01KB 492 | cwise_op_equal_to_2.o 0.01KB 493 | cwise_op_exp.o 0.01KB 494 | cwise_op_floor.o 0.01KB 495 | cwise_op_floor_div.o 0.01KB 496 | cwise_op_greater.o 0.01KB 497 | cwise_op_greater_equal.o 0.01KB 498 | cwise_op_isfinite.o 0.01KB 499 | cwise_op_less.o 0.01KB 500 | cwise_op_log.o 0.01KB 501 | cwise_op_logical_and.o 0.01KB 502 | cwise_op_logical_not.o 0.01KB 503 | cwise_op_maximum.o 0.01KB 504 | cwise_op_minimum.o 0.01KB 505 | cwise_op_mul_2.o 0.01KB 506 | cwise_op_neg.o 0.01KB 507 | cwise_op_reciprocal.o 0.01KB 508 | cwise_op_rsqrt.o 0.01KB 509 | cwise_op_select.o 0.01KB 510 | cwise_op_sign.o 0.01KB 511 | cwise_op_squared_difference.o 0.01KB 512 | cwise_op_sub.o 0.01KB 513 | cwise_op_pow.o 0.01KB 514 | dense_update_ops.o 0.01KB 515 | spacetodepth_op.o 0.01KB 516 | depthtospace_op.o 0.01KB 517 | dynamic_partition_op.o 0.01KB 518 | dynamic_stitch_op.o 0.01KB 519 | example_parsing_ops.o 0.01KB 520 | fake_quant_ops.o 0.01KB 521 | fused_batch_norm_op.o 0.01KB 522 | in_topk_op.o 0.01KB 523 | logging_ops.o 0.01KB 524 | lrn_op.o 0.01KB 525 | maxpooling_op.o 0.01KB 526 | mirror_pad_op.o 0.01KB 527 | non_max_suppression_op.o 0.01KB 528 | one_hot_op.o 0.01KB 529 | pack_op.o 0.01KB 530 | pad_op.o 0.01KB 531 | quantized_pooling_ops.o 0.01KB 532 | padding_fifo_queue_op.o 0.01KB 533 | queue_ops.o 0.01KB 534 | reduction_ops_all.o 0.01KB 535 | reduction_ops_any.o 0.01KB 536 | reduction_ops_max.o 0.01KB 537 | reduction_ops_mean.o 0.01KB 538 | reduction_ops_min.o 0.01KB 539 | reduction_ops_prod.o 0.01KB 540 | relu_op.o 0.01KB 541 | resize_bilinear_op.o 0.01KB 542 | resize_nearest_neighbor_op.o 0.01KB 543 | quantized_mul_op.o 0.01KB 544 | restore_op.o 0.01KB 545 | reverse_op.o 0.01KB 546 | string_join_op.o 0.01KB 547 | save_op.o 0.01KB 548 | save_restore_v2_ops.o 0.01KB 549 | scatter_nd_op.o 0.01KB 550 | scatter_op.o 0.01KB 551 | quantized_matmul_op.o 0.01KB 552 | session_ops.o 0.01KB 553 | shape_ops.o 0.01KB 554 | slice_op.o 0.01KB 555 | softmax_op.o 0.01KB 556 | softplus_op.o 0.01KB 557 | softsign_op.o 0.01KB 558 | quantize_op.o 0.01KB 559 | sparse_to_dense_op.o 0.01KB 560 | split_v_op.o 0.01KB 561 | strided_slice_op.o 0.01KB 562 | topk_op.o 0.01KB 563 | training_ops.o 0.01KB 564 | variable_ops.o 0.01KB 565 | where_op.o 0.01KB 566 | xent_op.o 0.01KB 567 | sparse_matmul_op.o 0.01KB 568 | quantized_instance_norm.o 0.01KB 569 | quantized_conv_ops.o 0.01KB 570 | quantized_concat_op.o 0.01KB 571 | quantized_bias_add_op.o 0.01KB 572 | quantized_batch_norm_op.o 0.01KB 573 | quantized_activation_ops.o 0.01KB 574 | gpu_tracer.o 0.01KB 575 | compression.o 0.01KB 576 | 577 | 578 | 579 | [-] Library File Size : 5.85656MB 580 | tensorflow_experimental 5302.87KB 581 | libprotobuf_experimental.a 528.41KB 582 | EdgeComputingiOS 90.37KB 583 | unknownModule 67.91KB 584 | libarclite_iphonesimulator.a 7.56KB 585 | 586 | 587 | 588 | [-] totalSize : 5.85656MB 589 | [-] Cast Time : 64 590 | -------------------------------------------------------------------------------- /out.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | [-] Object File Size : 5 | AFURLRequestSerialization.o 78.33KB 6 | AFURLSessionManager.o 77.56KB 7 | SDImageCache.o 33.31KB 8 | SDWebImageManager.o 32.56KB 9 | AFImageDownloader.o 30.02KB 10 | AFURLResponseSerialization.o 29.74KB 11 | UIScrollView+SVPullToRefresh.o 29.08KB 12 | SDWebImageDownloaderOperation.o 25.71KB 13 | SDWebImageDownloader.o 24.84KB 14 | UIButton+WebCache.o 23.75KB 15 | UIImageView+WebCache.o 23.11KB 16 | MASViewConstraint.o 19.35KB 17 | AFHTTPSessionManager.o 17.57KB 18 | AFAutoPurgingImageCache.o 15.62KB 19 | MASConstraint.o 15.08KB 20 | GMYFavoritesViewController.o 15.05KB 21 | NSArray+MASAdditions.o 14.57KB 22 | UIScrollView+SVInfiniteScrolling.o 14.55KB 23 | MASConstraintMaker.o 14.47KB 24 | MASCompositeConstraint.o 13.53KB 25 | GMYListItemPostCell.o 13.22KB 26 | AFSecurityPolicy.o 12.45KB 27 | UIButton+AFNetworking.o 10.97KB 28 | AFNetworkActivityIndicatorManager.o 10.22KB 29 | UIImageView+HighlightedWebCache.o 9.76KB 30 | SDWebImagePrefetcher.o 9.46KB 31 | AFNetworkReachabilityManager.o 8.04KB 32 | NSLayoutConstraint+MASDebugAdditions.o 8.00KB 33 | arclite.o 7.43KB 34 | AppDelegate.o 7.36KB 35 | UIWebView+AFNetworking.o 7.17KB 36 | UIImageView+AFNetworking.o 5.41KB 37 | View+MASAdditions.o 5.17KB 38 | UIImage+GIF.o 4.58KB 39 | UIProgressView+AFNetworking.o 4.20KB 40 | GMYNetEngine.o 3.99KB 41 | GMYListItem.o 3.42KB 42 | UIRefreshControl+AFNetworking.o 3.34KB 43 | UIActivityIndicatorView+AFNetworking.o 3.31KB 44 | GMYTabBarViewController.o 2.30KB 45 | MASViewAttribute.o 2.28KB 46 | unknownFile 2.04KB 47 | GMYListInfo.o 1.80KB 48 | ViewController+MASAdditions.o 1.76KB 49 | SDWebImageCompat.o 1.70KB 50 | UIView+WebCacheOperation.o 1.62KB 51 | NSData+ImageContentType.o 1.37KB 52 | libobjc.dylib 1.36KB 53 | UIImage+MultiFormat.o 1.23KB 54 | SDWebImageDecoder.o 1.21KB 55 | NSDictionary+gmy_Category.o 1.08KB 56 | GMYJSONModel.o 1.03KB 57 | libSystem.dylib 0.89KB 58 | CoreGraphics 0.75KB 59 | GMYFeaturesViewController.o 0.69KB 60 | UIView+gmy_Category.o 0.67KB 61 | MASLayoutConstraint.o 0.54KB 62 | GAG.app.xcent 0.36KB 63 | Security 0.26KB 64 | CoreFoundation 0.26KB 65 | SVPullToRefresh-dummy.o 0.25KB 66 | AFNetworking-dummy.o 0.25KB 67 | SDWebImage-dummy.o 0.25KB 68 | Pods-GAG-dummy.o 0.25KB 69 | Masonry-dummy.o 0.24KB 70 | UIKit 0.16KB 71 | main.o 0.15KB 72 | Foundation 0.14KB 73 | SystemConfiguration 0.14KB 74 | ImageIO 0.09KB 75 | MobileCoreServices 0.05KB 76 | QuartzCore 0.02KB 77 | 78 | 79 | 80 | [-] Library File Size : 81 | libAFNetworking.a 314.20KB 82 | libSDWebImage.a 194.45KB 83 | libMasonry.a 94.99KB 84 | GAG 55.24KB 85 | libSVPullToRefresh.a 43.88KB 86 | libarclite_iphonesimulator.a 7.43KB 87 | unknownModule 2.04KB 88 | libPods-GAG.a 0.25KB 89 | 90 | 91 | 92 | [-] totalSize : 0.695766MB 93 | [-] Cast Time : 10 94 | --------------------------------------------------------------------------------