由于需要将之前生成的mediapipe.framework添加到自己的framework中,但是很奇怪用普通的拖拽方式添加,项目工程在加载运行自己的framework时,总是找不到mediapipe.framework中的头文件,而只编译自己的framework时,也是可以通过的,或者直接将mediapipe.framework添加到项目工程中,调用库中的方法也可以使用,所以在此记录一下遇到这种情况时,怎么处理。
最开始的使用方式拖拽,copy,添加target
然后运行项目,总是报错:
error build: Undefined symbol: _OBJC_CLASS_$_MediaPipe
这说明添加的mediapipe.framework没有编译到自定义的framework中,通过ar -t查看自定义framework的.o文件,发现果然没有mediapipe.framework对应的 .o 文件,这就很苦恼,明明已经copy,并且添加到自定义的framework中了,查看 Build Phases---Link Binary With Libraries 也是有对应的mediapipe.framework库,查看 Build Setting---Framework Search Paths 也有对应的链接地址,为何还会这样找不到???真是太难了!!!
好吧,既然这样不行,那就换一种方式,只链接mediapipe.framework中的二进制文件,这样会自动在 Build Setting---Library Search Paths 中生成对应的文件地址,如果没有,那就自己添加二进制文件对应的地址,结果如图:
此时导入mediapipe.framework头文件:
#import "MediaPipe.framework/Headers/MediaPipe.h"
发现有点儿长,我们可以在Header Search Paths中添加对应的头文件地址
此时导入mediapipe.framework头文件:
#import "MediaPipe.h"
即可使用
然后运行项目,验证是否通过,噢,终于运行成功了!!!
介于遇到了这种问题,然后我尝试添加了其他第三方framework进行测试,发现确实需要此种方式添加,才能在自定义的framework中生成第三方framework对应的 .o 文件,而对于自定义的 A.framework 工程中又自定义了 B.framework 工程,是不需要此种添加方式的,因为 A.framework 工程中可以在Build Phases---Target Dependencies中添加对 B.framework 的依赖。(这一段不一定准确,只是我的一种猜测结论)
下面再展示一下 lipo 和 ar 命令的使用,用于查看framework的 .o 文件:
整理不易,转载请注明,谢谢~