zoukankan      html  css  js  c++  java
  • iOS.StaticLibrary.1-avoid-duplicate-symbol-in-static-library[draft]

    Avoid duplicate symbol in static library and its customer

    发布static library给使用者使用。在实际的工程实践中,iOS静态库一般会在对外/对内提供SDK时出现。

    静态库(SDK)本身可能依赖一些第三方的库,当使用该SDK的App也依赖了同样的第三方库,那么问题就来啦。

    Figure: SDK 和 SDK Customer 依赖相同的3rd library

    1. static library如何避免和使用者的代码有重复符号 

    Ref[1] Ref[4]

    2. 从iOS的静态库中抽取出object file

    Ref[5]

    1 $ lipo libXXXSDK.a -thin armv7 -output libXXXSDK-armv7.a
    2 $ ar -x libXXXSDK-armv7.a

    3. 发布静态库

    3.1 发布支持模拟器和真机的静态库

    Ref[6] Ref[7]

    3.2 debug编译和release编译的静态库区别

    A: NSLog

    debug: NSLog会输出 

    release: NSLog不会输出

    3.3 如何strip静态库的符号表

    A) 隐藏静态库的符号

    Ref[17]

    " Hiding internal names requires a few simple Xcode build settings, and it is not generally

    necessary to modify source or change the type of the built product.

    1. 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.

    2. 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).

    3. 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).

    4. 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." Ref[17]

    关于"STRIP_SYTLE" 参考Ref[19]

    B) 将静态库的符号表剔除后, 会出现这种情况: 静态库出现crash时,无法将地址符号化。Ref[18]

    C) 那么静态库的符号被strip掉后, 会不会像App被生成.dSYM文件呢? 或者其他类似的东西?

    3.4 自动构建多architecture的静态库

    Ref[15] 

    3.5 当发布商业的静态库时,选择debug configuration 还是release configuration呢?

    Ref[16]


    Reference

    1. Avoiding dependency collisions in iOS static library managed by CocoaPods  (AAAA+)

    http://blog.sigmapoint.pl/avoiding-dependency-collisions-in-ios-static-library-managed-by-cocoapods/

    https://github.com/jverkoey/nimbus/blob/master/scripts/generate_namespace_header

    Bash, Perl or Sed, Insert on New Line after found phrase

    http://stackoverflow.com/questions/6761796/bash-perl-or-sed-insert-on-new-line-after-found-phrase

    2. Using Static Libraries in iOS

    https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/creating.html

    3. UNIX ar Examples: How To Create, View, Extract, Modify C Archive Files (*.a)

    http://www.thegeekstuff.com/2010/08/ar-command-examples/

    4. Avoiding duplicate symbol errors during linking by removing classes from static libraries  (ToRead)

    http://atnan.com/blog/2012/01/12/avoiding-duplicate-symbol-errors-during-linking-by-removing-classes-from-static-libraries

    5. Extract object (*.o) files from an iPhone static library

    6. How to build a library for both iPhone simulator and device? 

    7. Build fat static library (device + simulator) using Xcode and SDK 4+

    8. Distributing your Static Library

    http://www.akitaonrails.com/2011/04/24/objective-c-distributing-your-static-library#.VZY4ShOqqko

    9. Xcode 6 drops armv7s

    https://www.cocoanetics.com/2014/10/xcode-6-drops-armv7s/

    10. iOS Static Libraries Are, Like, Really Bad, And Stuff  (ToRead)

    http://landonf.org/code/ios/Radar_15800975_iOS_Frameworks.20140112.html

    11. Strip debug symbol from universal static libraries (tested for iOS only)

    https://gist.github.com/neonichu/1662881

    12. An XCode project template to build universal frameworks (arm7, arm7s, and simulator) for iOS / iPhone.

    https://github.com/kstenerud/iOS-Universal-Framework

    13. http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial (AAAA+)

    14. strip nmeidt symbols: 编辑符号的工具

    https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/symbols.1.html 

    15. Automatic build of static library for iOS and many architectures (AAAA+)

    http://blog.sigmapoint.pl/automatic-build-of-static-library-for-ios-for-many-architectures/

    16. How to distribute Static libraries?

    http://stackoverflow.com/questions/5730432/how-to-distribute-static-libraries/5778007#5778007

    "So, long story short : just distribute a fat, release version of your library !" 

    17. strip symbol in static library

    17.1 Symbol hiding in static libraries built with Xcode/gcc

    17.2 Symbolification: Shipping Symbols

    http://bdunagan.com/2010/05/15/symbolification-shipping-symbols/

    17.3 How to solve symbolication problems --> "Build settings for getting proper symbol data"

    http://support.hockeyapp.net/kb/client-integration-ios-mac-os-x/how-to-solve-symbolication-problems

    17.4 xcode build settings for debug symbol

    http://jonathanblog2000.blogspot.tw/2013/07/xcode-build-settings-for-debug-symbol.html

    18. Symbolicating crash log for app with static library

    19. Xcode Build Setting Reference

    https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html

    https://developer.apple.com/library/mac/technotes/tn2004/tn2123.html#SECNOSYMBOLS

  • 相关阅读:
    什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。
    如何定位测试用例的作用?
    为什么要在一个团队中开展软件测试工作?
    安装git和小乌龟
    idea配置tomcat
    Maven下载及配置
    JDK(1.6,1.7,1.8,10,11)64位解压版配置使用
    SQL中Case When的用法
    mybatis批量新增和修改删除
    org.apache.ibatis.binding.BindingException表示mapper.xml没找到
  • 原文地址:https://www.cnblogs.com/cwgk/p/4618637.html
Copyright © 2011-2022 走看看