写作是一种习惯,稍微松懈,也许失去的就很多。过了一个年,居然很多天都没有更新,幸福的代价吧:)

标题的问题其实以前碰到过,不过当时在iOS,所以随手处理了没有重视。

而这次是在macOS,所使用的库,本身已经用brew安装过,所以本机调试没有发现这个问题。

等到拷贝到用户的机器上,突然发现程序无法启动,查看log才发现库没有找到。而实际上当时,我已经很确认的将dylib库文件打包到了app中。

随后发现macOS的dylib采取了比较特殊的机制,每个文件都内置有完整的路径名,如果不把dylib文件放置到这个路径上去,应用调用dylib的时候就会报错找不到库文件。

官方推荐的解决的方法是将库文件及头文件打包编译为Frameworks,随后引入到项目中。不过对于很多gnu的跨平台程序员,肯定不希望单独为macOS来写一个Xcode工程。

所以我建议还是使用内置的工具来修改这个执行路径,步骤如下:

假设我们的库文件名为libabc.0.dylib,通常是放置在/usr/local/lib文件夹中,为了不影响macOS下面其它应用对这个库的调用,我们首先把这个文件拷贝出来到我们的开发工作目录。

使用otool -L libabc.0.dylib命令来查看这个库内置的路径名,没有意外的话,应当是/usr/local/lib/libabc.0.dylib。

修改dylib文件中保存的文件路径:

install_name_tool -id @executable_path/../Frameworks/libabc.0.dylib libabc.0.dylib

注意修改之后的路径@executable_path/../Frameworks/libabc.0.dylib,这个是app中的Frameworks目录,许多引用的框架和sdk内置的dylib文件,编译时候会放置到这里。

4. 随后在程序中正常引用dylib的头文件,注意.h头文件要拷贝到开发目录或者在工程中设置搜索路径来引用。

5. 在工程设置的General->Embedded Binaries中引入所使用的库文件libabc.0.dylib,这是保证app编译链接的时候能够正常通过。我记得Xcode7还是什么版本中,在这里银如意了库文件,库文件就会被自动的加入到Frameworks目录,但也许是不是sdk内置的库文件,只在这里引用解决了链接问题,但并不能自动把dylib库文件打包到app中。

6. 在工程设置的Build Phases中,点左上角“+”,选择Embed Libraries,然后在其中选择Destination为Frameworks,其它项目保持默认值不变。把libabc.0.dylib文件拖过来到本项目下面的列表中。这样编译的时候,才会把库文件打包到app的Frameworks文件夹。

做完了以上这些,编译出来的app应用就能正确的调用自己包中的库文件了。

dylib java_将dylib库嵌入macOS应用的方法相关推荐

  1. 淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使用方法教程

    淘宝对外提供共享的一个IP地址库API,更新也比较及时,非常适合我们日常的使用. 以下讨论的是和淘宝网 IP查询 地址库 调用 API 相关的淘宝网及新浪网等几大官方IP查询API接口地址库的调用及使 ...

  2. 易语言 剪切板 html,易语言中嵌入html直接显示方法

    易语言中嵌入html直接显示方法 以前是作者根据经验写的一点关于嵌入HTML语言的方法,大家参考下. 技术渣渣,没有找到更高的方法,现在暂时使用这种方法,将代码本地化然后超文本浏览框调用 写到文件 ( ...

  3. dos系统不能安装python模块,无法使用pip命令安装python第三方库的原因及解决方法...

    再dos中无法使用pip,命令主要是没有发现这个命令.我们先找到这个命令的位置,一般是在python里面的scripts文件夹里面.我们可以把dos切换到对应的文件夹,再使用pip命令就可以了. 如果 ...

  4. python rsa 公钥解密_python利用rsa库做公钥解密的方法教程

    前言 对于RSA的解密,即密文的数字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再对结果除以 N 求余数即可得到明文.D 和 N 的组合就是私钥(private key). 算法的加密 ...

  5. python加密库_python基于pyDes库实现des加密的方法

    本文实例讲述了python基于pyDes库实现des加密的方法.分享给大家供大家参考,具体如下: 下载及简介地址:https://twhiteman.netfirms.com/des.html 如需要 ...

  6. python安装第三方库-python第三方库的四种安装方法

    讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...

  7. Py之glob: glob库文件名模式匹配+返回所有匹配的文件路径列表库的简介、使用方法之详细攻略

    Py之glob: glob库文件名模式匹配+返回所有匹配的文件路径列表库的简介.使用方法之详细攻略 目录 glob库的简介 glob库的使用方法 1.单个字符通配符:用问号(?)匹配任何单个的字符.

  8. python操作文件的库_Python使用pyshp库读取shapefile信息的方法

    通过pyshp库,可以读写Shapefile文件,查询相关信息,github地址为 https://github.com/GeospatialPython/pyshp#reading-shapefil ...

  9. 基于bs4库的HTML内容查找方法

    一.信息提取实例 提取HTML中所有的URL链接 思路:1)搜索到所有的<a>标签 2)解析<a>标签格式,提取href后的链接内容 >>> import r ...

最新文章

  1. NLP模型BERT和经典数据集!
  2. git之工作区、版本区、远程仓库之间相互操作
  3. 前端--3、JavaScript
  4. springboot 配置多个请求服务代理
  5. android webview video标签,Android WebView支持html5 video标签
  6. JVM运行机制理解整理
  7. # 融云 SDK 新用户入群加载历史消息 记录融云 SDK 的一个小功能,分享一下 ## 背景 项目中有用到融云 SDK 中的群组功能,产品说需要新人入群的时候看到历史消息。 本来以为直接能获
  8. 群晖系统服务器设置,私人云搭建 篇二:群晖系统搭建和初步设置的不正确指北...
  9. 九宫格日记 2017年12月19日(周二)
  10. 提升领导力这7个法则,你不得不知道
  11. 假设检验中两类错误及最小样本量计算
  12. 打印机怎么选择双面打印,支持双面打印资料的平台
  13. php判断字符串长度 strlen()与mb_strlen()函数
  14. 用于理解C++类中静态成员的单子模式研究
  15. 记录一下 开发STM32 USB HID踩过的坑
  16. Java后端Cookie工具类(设置Cookie有效时间、得到Cookie的域名等方法)
  17. URL伪静态。SEO中理解伪静态
  18. SQL 增加或删除一列
  19. 实对称矩阵的特征值求法_机械振动理论(3)-解析实模态分析
  20. tl-wdr7300虚拟服务器怎么设置,TP-Link TL-WDR7300路由器无线桥接怎么设置?

热门文章

  1. WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体
  2. RabbitMQ高级指南:从配置、使用到高可用集群搭建
  3. Flex与.NET互操作(八):使用FluorineFx网关实现远程访问
  4. iqn怎么查 linux_程序员必备:46个Linux面试常见问题!收藏!
  5. 阿里开源Canal--①简介
  6. php利用openssl实现RSA非对称加密签名
  7. 总结PHP中DateTime的常用方法
  8. Linux之awk:按照字符或列进行筛选与计算列值 条件动作
  9. Swoole安装popen()找不到
  10. android 屏幕完美适配,Android完美适配不同屏幕