XCode隐藏第三方库的符号
2016-09-02 本文已影响667人
fishg
以下摘抄自:http://stackoverflow.com/questions/3276474/symbol-hiding-in-static-libraries-built-with-xcode-gcc
- Eliminate any internal symbols required between modules by performing a single-object prelink. Set the Xcode build setting named "Perform Single-Object Prelink" to Yes (GENERATE_MASTER_OBJECT_FILE=YES). This causes ld to be run with the "-r" flag.
- Make sure that the setting "Strip Style" is set to "Non-global symbols" (STRIP_STYLE=non-global), this passes "-x" to ld.
- Stripping is only actually performed on static libraries if post-processing is enabled (and this is not the default). Set Xcode build setting "Deployment Postprocessing" to yes. (DEPLOYMENT_POSTPROCESSING=YES). Also make sure that "Use separate strip" is set to Yes (not always the default) (SEPARATE_STRIP=YES).
- If, in addition to local symbols, if you need to remove some of the global symbols you can supply additional options to the strip command, under the Xcode build setting "Additional strip flags". E.g. I commonly use the strip "-R somefile" option to provide a file with an additional list of symbols which I want removed from the global symbol table.
然后需要移除一些global的自定义符号,比如FMDatabase
nm -j 静态库 | grep FMDatabase > third.symbol
然后把third.symbol文件放的项目根目录,再在xcode工程对应target的 build settings里找到:Single-Object Prelink Flags,设置值:
-unexported_symbols_list $(PROJECT_DIR)/third.symbol