Remy项目编译报错:Protobuf类相关编译错误求助
从你提到的截断错误信息来看,大概率是Protobuf相关的问题——要么是自定义的Protobuf生成文件没正确生成,要么是版本兼容、路径识别出了问题。结合你用的Ubuntu 14.04和Protobuf 3.5.1环境,给你几个实用的排查和解决步骤:
1. 先手动生成Protobuf的C++文件
Remy项目里的protobufs目录有自定义的协议定义文件,编译前得先把这些.proto文件转换成C++能识别的头文件和源文件。你可以先切换到该目录执行生成命令:
cd protobufs protoc --cpp_out=. *.proto cd ..
生成完之后,再重新执行./autogen.sh && ./configure && make试试,很多时候这类编译错误都是因为跳过了这个步骤导致的。
2. 让configure识别到你安装的Protobuf 3.5.1
Ubuntu 14.04系统自带的Protobuf版本通常是2.x系列,和你手动装的3.5.1可能冲突。你可以在运行configure时显式指定新版本的路径,确保脚本优先用你装的版本:
./configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
这里默认你把Protobuf装在了/usr/local目录,如果是自定义安装路径,把路径改成对应版本的pkgconfig目录就行。
3. 补全系统基础编译依赖
Ubuntu 14.04有些老的编译依赖可能没装全,导致编译时找不到必要的头文件或库。你可以先安装这些基础包:
sudo apt-get install build-essential autoconf libtool pkg-config libprotobuf-dev
不用担心这里装的系统版Protobuf会冲突,只要你在configure时指定了自己的3.5.1路径,编译时会优先用你装的版本。
4. 手动添加头文件路径到Makefile
如果上面的步骤都试过还是报错,可能是编译器找不到Protobuf生成的头文件。你可以打开生成的Makefile,找到CXXFLAGS这一行,把protobufs目录添加到包含路径里:
比如修改成:
CXXFLAGS = -g -O2 -I./protobufs ...
保存后再重新运行make应该就能识别到对应的头文件了。
要是你能把完整的错误信息贴出来(比如具体是哪个头文件找不到,或者是什么语法错误),还能更精准地定位问题,但先试试上面这几个方案,应该能解决大部分这类编译问题。
内容的提问来源于stack exchange,提问作者digi_exp527

