代码之家  ›  专栏  ›  技术社区  ›  fionbio

如何在iOS中链接protobufs

  •  0
  • fionbio  · 技术社区  · 8 年前

    我一直在努力让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. 内部版本=>成功
    1 回复  |  直到 8 年前
        1
  •  0
  •   fionbio    8 年前

    首先,我认为构建脚本实际上并不是在构建静态库。我浏览了脚本,并使用以下工具检查了构建输出 lipo otool . 看起来正确。

    然后,我在构建输出中遇到了以下警告:

    URGENT: building for iOS simulator, but linking against dylib (/usr/local/lib/libprotobuf.dylib) built for OSX

    我加倍检查了构建目标,以确保我的目标是iOS。好啊

    然后我开始搜索为什么它会链接到动态库,即使一切都是静态的,并在互联网上找到一篇帖子,说OSX更喜欢链接到DLL而不是静态库。如果要解决此问题,必须设置build命令 some kind of style . 我在Xcode编辑器中,所以我没有做翻译这个的练习。

    然而,考虑到这一点,我删除了对动态库的引用,以观察对静态的回退:

    rm /usr/local/lib/libprotobuf.dylib

    建筑跑成功

    所以原因是已知的,但这个答案是不完整的。请编辑此答案,并提供有关如何让Xcode强制静态链接与获取动态库、仅删除动态库引用的详细信息