解决ProtolBuf 2.4.1在XCode 5上编译的问题

作者:如沐春风 | 创建时间: 2023-04-21
解决ProtolBuf 2.4.1在XCode 5上编译的问题

操作方法

为什么要编译ProtolBuf 2.4.1?

通常是为了配置 ProtocolBuffer在Objective-C上的代码生成器,或者说是运行环境。 运行make命令的时候,会出现下面的相关错误。

ProtolBuf 2.4.1在XCode 5上编译时,会出现大体上如下的错误,

/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..    -D_THREAD_SAFE  -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -O2 -g -DNDEBUG -MT message.lo -MD -MP -MF .deps/message.Tpo -c -o message.lo `test -f 'google/protobuf/message.cc' || echo './'`google/protobuf/message.cc libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -D_THREAD_SAFE -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -O2 -g -DNDEBUG -MT message.lo -MD -MP -MF .deps/message.Tpo -c google/protobuf/message.cc  -fno-common -DPIC -o .libs/message.o google/protobuf/message.cc:130:60: error: implicit instantiation of undefined template 'std::__1::basic_istream<char, std::__1::char_traits<char> >' return ParseFromZeroCopyStream(&zero_copy_input) && input->eof(); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:108:28: note: template is declared here class _LIBCPP_TYPE_VIS basic_istream; ^ google/protobuf/message.cc:135:67: error: implicit instantiation of undefined template 'std::__1::basic_istream<char, std::__1::char_traits<char> >' return ParsePartialFromZeroCopyStream(&zero_copy_input) && input->eof(); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:108:28: note: template is declared here class _LIBCPP_TYPE_VIS basic_istream; ^ google/protobuf/message.cc:175:16: error: implicit instantiation of undefined template 'std::__1::basic_ostream<char, std::__1::char_traits<char> >' return output->good(); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:110:28: note: template is declared here class _LIBCPP_TYPE_VIS basic_ostream; ^ 3 errors generated.

解决方法如下:

找到文件src/google/protobuf/message.cc     在文件的第一个#include之上的一行,加入 #include <istream> 继续运行make ,即成功通过。

点击展开全文

更多推荐