生成 .a 静态库时候的问题

问题描述

用category造成无法识别 unrecognized selector错误。错误原因是使用了category扩展自定义,编译工程在未添加 -Objc时提示无法识别

比如我在工程中自己定义了一个[NSString+Trans],并在工程的.h中调用了类方法,例如 [NSString hexToBytes],当根据这个写法生成的.a 在另一个工程中调用,编译的时候报 unrecognized selector sent to class

参考文章

  • 原因分析

解决方法:

  • 方案一:不使用category,也就是[NSString+Trans]换一个名字如NLMyTransMethod

  • 方案二:继续使用当前.a,但是在调用这个.a的工程中增加

    • -all_load Loads all members of static archive libraries.
    • -ObjC Loads all members of static archive libraries that implement an Objective-C class or category.
    • -force_load (path_to_archive) Loads all members of the specified static archive library. Note: -all_load forces all members of all archives to be loaded. This option allows you to target a specific archive.

    翻译过来就是

    • -all_load就是会加载静态库文件中的所有成员,
    • -ObjC就是会加载静态库文件中实现一个类或者分类的所有成员
    • -force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。所以对于使用runtime时候的反射调用的方法应该使用这三个中的一个进行link,以保证所有的类都可以加载到内存中供程序动态调用

    实例截图:(最好用上面说到的 -force_load)

生成 .a 静态库时候的问题_第1张图片
实例
-force_load
$(PROJECT_DIR)/....
-lstdc++

你可能感兴趣的:(生成 .a 静态库时候的问题)