我可以把C++库编译成dylib并在iOS9项目中使用吗

Can I compile C++ library into dylib and use them in iOS 9 project?

本文关键字:项目 iOS9 并在 dylib C++ 编译 我可以      更新时间:2023-10-16

我有一个iOS应用程序,它使用liblzma。我目前能够成功地编写跨平台编译脚本,将源代码编译成.a文件,并在我的项目中使用带有头的.a。

现在在iOS8及以上版本中,苹果开始支持动态链接,所以我很好奇我是否可以在我的项目中使用liblzma.dylib而不是liblzma.但我失败了。

以下是我所做的:

  1. 修改我以前用于编译liblzma.a的编译脚本。我将--disable-shared改为--enable-shared,然后使用lipo将每个arch的.dylib组合为fat.dylb.

  2. 我从我的项目中删除了liblzma.a,并将liblzma.dylib添加到我的项目中

  3. 建立,成功。但在设备上运行时,我遇到了以下错误

dyld:未加载库:/Volumes/Data/Develer/build/xz-5.2.2/build/iOS/arm64/lib/liblzma.5.dylib参考:/var/containers/Bundle/Application/AB7A063F-9C3F-4CEB-A757-96523894700/***.app/****原因:不兼容的库版本:***需要8.0.0或更高版本,但liblzma.5.dylib提供6.0.0版本(lldb)

  1. 我用工具检查了新建的实际版本。dylib,这就是我得到的

/卷/数据/开发人员/构建/xz-5.2.2/build/iOS/Universal/lib/liblzma.5.dylib:/卷/数据/开发人员/build/xz-5.2.2/build/iOS/x86_64/lib/libzma.5.dylib(兼容版本8.0.0,当前版本8.2.0)/usr/lib/libSystem.dylib(兼容版本1.0.0,当前版本1226.10.1)

我有几个问题:

  • 我可以这样加dylib吗
  • 当我运行应用程序时,liblzma.dylib是否真的复制到了我的iOS设备上
  • 为什么错误消息显示liblzma.5.dylib提供版本6.0.0,而otool显示当前版本8.2.0
  • 我知道iOS 8.0+应用程序要使用dylib,也需要对dylib进行签名。我该怎么做

谢谢!

已解决!

  • 是的,我可以那样装dylib
  • 我需要为要复制的dylib添加复制文件构建阶段
  • 当没有复制liblzma.dylib时,iOS似乎在设备上使用了一个liblzma.dylib,它的版本号低于要求
  • 我需要使用install_name_tool修改dylib的安装名称