如何在iOS中链接protobufs

时间:2018-01-20 11:40:38

标签: ios xcode protocol-buffers static-libraries protobuf-c

我一直在努力让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

以下是我的步骤:

  1. 使用this excellent script为所有体系结构编译静态库。
  2. 将静态库添加到编译目标的Linked Frameworks and Libraries选项卡下的General部分。
  3. Build =>成功

1 个答案:

答案 0 :(得分:0)

首先,我认为构建脚本实际上并没有构建静态库。我浏览了脚本并使用lipootool等工具检查了构建输出。看起来没错。

然后我在构建输出中遇到了这个警告:

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参考