如何在 iOS 中链接 protobuf
Posted
技术标签:
【中文标题】如何在 iOS 中链接 protobuf【英文标题】:How to link protobufs in iOS 【发布时间】:2018-01-20 11:40:37 【问题描述】:我一直在努力让 protobufs 3 为 ios 编译/运行。一切都编译,但在运行时我得到:
dyld: Library not loaded: /usr/local/lib/libprotobuf.15.dylib
Referenced from: /path/to/TheApp.app/TheApp
Reason: no suitable image found. Did find:
/usr/local/lib/libprotobuf.15.dylib: mach-o, but not built for iOS simulator
这是我的步骤:
-
使用this excellent script为所有架构编译静态库。
将静态库添加到编译目标的
General
选项卡下的Linked Frameworks and Libraries
部分。
构建 => 成功
【问题讨论】:
【参考方案1】:首先,我认为构建脚本实际上并不是在构建静态库。我浏览了脚本并使用lipo
和otool
等工具检查了构建输出。看起来正确。
然后我在构建输出中遇到了这个警告:
URGENT: building for iOS simulator, but linking against dylib (/usr/local/lib/libprotobuf.dylib) built for OSX
我仔细检查了构建目标,以确保我的目标是 iOS。好的。
然后我开始寻找为什么它会链接到动态库,即使一切都是静态的,并在互联网上看到一篇文章说 OSX 更喜欢链接到 DLL 而不是静态库。如果你想解决这个问题,你必须设置你的构建命令some kind of style。我在 Xcode 编辑器中,所以我没有做翻译这个练习。
但是,鉴于此,我删除了对动态库的引用,以查看回退到静态:
rm /usr/local/lib/libprotobuf.dylib
构建。跑。成功。
所以原因是已知的,但这个答案是不完整的。请编辑此答案并提供有关如何让 Xcode 强制静态链接与获取 dylib 的详细信息,以及仅删除 dylib 参考的详细信息
【讨论】:
以上是关于如何在 iOS 中链接 protobuf的主要内容,如果未能解决你的问题,请参考以下文章
如何在 xamarin ios pcl 中使用 protobuf-net