使用 xCode 5 编译 protobuf

Posted

技术标签:

【中文标题】使用 xCode 5 编译 protobuf【英文标题】:Compile protobuf with xCode 5 【发布时间】:2013-10-18 07:52:13 【问题描述】:

我想在我的项目中使用 protobuf(https://code.google.com/p/protobuf/)

您是否成功,请帮忙分享您的经验?

谢谢。

【问题讨论】:

【参考方案1】:

您可以通过将以下行添加到您的 Podfile 来为使用 Cocoapods 的 Xcode 5 项目添加对 Google Protocol Buffers 的支持。

pod 'GoogleProtobuf', '~> 2.5.0'

这会将 C++ 版本的 protobuf 代码放入项目的 Pod 中。它还将在您的项目中的文件夹Pods/GoogleProtobuf/bin/protoc 中添加protoc 编译器。

您可以在项目中创建自定义构建规则,自动将.proto 文件转换为.ph.h,cc 文件。我是这样做的:

将构建规则设置为“处理名称匹配的源文件:*.proto 使用自定义脚本”。该脚本应包括以下内容:

cd $INPUT_FILE_DIR
$SRCROOT/Pods/GoogleProtobuf/bin/protoc --proto_path=$INPUT_FILE_DIR $INPUT_FILE_PATH --cpp_out=$INPUT_FILE_DIR/cpp

将输出文件设置为包括以下内容:

$(INPUT_FILE_DIR)/cpp/$(INPUT_FILE_BASE).pb.h
$(INPUT_FILE_DIR)/cpp/$(INPUT_FILE_BASE).pb.cc

您在项目中包含的任何 .proto 文件现在都将自动转换为 C++,然后作为构建的一部分进行编译。

【讨论】:

谢谢!我会试一试的。 我发现这里的解决方案存在问题。在 Cocoapod 中完成的构建只能在 ios 模拟器中使用。我正在研究这个问题的解决方案。现在,您可以使用我在下面的替代答案中发布的其他方法。 你好,史密斯,我确实使用 CocoaPods 为 iPad 构建了 protobuf(2.4.1),它可以工作。我会看看你的新解决方案。谢谢! 出于某种原因,当我这样做时,.proto 文件本身被复制到输出应用程序文件夹中。任何想法如何防止这种情况? 使用自制风味的 Protobuf (brew install protobuf) 而不是 Cocoapods。遵循如上所述的构建规则设置,它可以完美运行!一个值得注意的附录,对某些人(比如我)来说可能并不那么明显:“包含在你的项目中”实际上意味着将 .proto 文件添加到项目的 Compile Sources 构建阶段。【参考方案2】:

如果您不介意自己构建 Google Protobuf,那么使用 Cocoapods 的一个很好的替代方法是在此处运行 bash 脚本。

https://gist.github.com/BennettSmith/7150245

此脚本将生成支持 i386、armv7、armv7s、arm64 和 x86_64 架构的 Google Protobuf 的正确构建。它将生成一个通用的静态库。它还将生成用于 OS X 的 protoc 编译器。

【讨论】:

我只是想知道这个 scipt 是否适用于 protobuf 2.4.1?我可以删除 x86_64 的构建吗(iOS 只需要)。 我不确定 2.4.1。使用该版本而不是较新的 2.5.0 是否有特定原因? 没有原因,只是因为我当前的项目使用的是protobuf 2.4.1 脚本有问题。扫描 build.log 文件,我看到一些关于构建的错误。查看 config.log 文件,它似乎在尝试调用 clang 时出现错误。根据上面的 cmets,它应该只适用于 OOTB,对吗? config.log 输出:pastebin.com/v6sEr0Ch build.log 输出:pastebin.com/gNjgU9S9 结果,据我所知,没有任何生成,尤其是通用或 arm64 版本。 :(提前谢谢! @BennettSmith - 你的剧本很棒。但是我对 arm64 有同样的问题。我们删除了该部分并让脚本完美运行。我们没有使用 arm64,所以现在可以了。只是好奇,万一我们尝试使用 arm64,你知道如何修复吗?

以上是关于使用 xCode 5 编译 protobuf的主要内容,如果未能解决你的问题,请参考以下文章

安装 Xcode10.2.1 但仍然收到错误“使用 Swift 5.0.1 编译的模块无法由 Swift 5.1 编译器导入”

使用 Xcode 5.0.1 和 Mavericks 编译 Autotalent v2 问题

Xcode 5.1 和架构 x86_64 的编译错误

XCode 3.2.5 Base SDK 缺失,只能编译模拟器

使用 Swift 5.1 编译的模块不能被 Swift 5.1.2 编译器导入

为 Xcode 4.3.2 和 SDK 5.1 编译 pjsip 2 时出错