Xcode下使用第三方dylib

如何使用

Use Guidelines
这是apple给出的官方使用说明,结合第一行的描述

Dynamic libraries can be loaded either when the app launches or as it runs. Libraries that are loaded at launch time are called dependent libraries. Libraries that are loaded at runtime are called dynamically loaded libraries.

由此,现在有两种load的方式,第一种作为依赖load,这样的话是在运行之前就配置好的,相当于全局的load。
其次是动态的load,在动态load时,是一个runtime的使用方式,也就是说在具体的code里面需要自己反射lib里面的方法,通过dlopen等api来加载lib,调用方法。

具体的参考Use Guidelines

不过,一般我们都会优先考虑使用全局的方式load,那么此时如何让项目自动load?

  1. 在build phase里进行copy 动作,将我么需要的lib文件copy到响应的目录下,如framework
  2. 在最终build出来的执行文件,使用otool查看lib的加载信息,然后使用install name tool来修改具体的加载路径
    这里可以参考stackoverflow的具体问题,最佳答案有详细步骤
  3. 需要注意的是,在现在使用了instal name tool之后,这个项目中的这个install后的相关lib属性就已经保存到了项目生成的binary文件中,无论copy到何处都是保留了这个配置信息的
  4. 具体问题中我们看到了类似,@executable_path的写法,这是系统保留的动态获取路径的方法,详细使用可以参考动态路径,其中涉及
  • @rpath
  • @loader_path
  • @executable_path
    他们的具体含义,用到的继续学习吧

PS:
在本次项目调试中发现,直接使用xcode的run,那么xcode会自动将引入的全局加载方式的lib文件install到当前product所在的目录,与生成的product平级。从而只要我们在build phase copy这个lib文件到product directory,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 仅以方便自己查阅记录前言1.静态库和动态库有什么异同?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗...
    190CM阅读 4,276评论 0 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,432评论 25 708
  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 12,088评论 3 42
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,959评论 6 342
  • 你爱自己吗?很多人都回答“爱”可当有些事情同时出现的时候,你是否还是爱自己。今天一大早,身体稍微有点不舒服,其实这...
    荣涵阅读 262评论 0 1