我可以把C++库编译成dylib并在iOS9项目中使用吗
Can I compile C++ library into dylib and use them in iOS 9 project?
我有一个iOS应用程序,它使用liblzma。我目前能够成功地编写跨平台编译脚本,将源代码编译成.a文件,并在我的项目中使用带有头的.a。
现在在iOS8及以上版本中,苹果开始支持动态链接,所以我很好奇我是否可以在我的项目中使用liblzma.dylib而不是liblzma.但我失败了。
以下是我所做的:
-
修改我以前用于编译liblzma.a的编译脚本。我将--disable-shared改为--enable-shared,然后使用lipo将每个arch的.dylib组合为fat.dylb.
-
我从我的项目中删除了liblzma.a,并将liblzma.dylib添加到我的项目中
-
建立,成功。但在设备上运行时,我遇到了以下错误
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)
- 我用工具检查了新建的实际版本。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的安装名称
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 如何维护资源管理器项目视图中当前可见的项目列表
- 错误-我无法在VS2019中打开新的Qt项目
- 我可以把C++库编译成dylib并在iOS9项目中使用吗