【c++ debug】fatal error: google/protobuf/port_def.inc: no such file or directory

1. 问题

  • xxx.pb.h: fatal error: google/protobuf/port_def.inc: no such file or directory

2. 原因

  • protoc 与 头文件版本不匹配,port_def.inc是protobuf3.7.0版本之后才有的

3. 解决方法

  • 更新protoc版本
  • 如果不是重新生成.pb文件,注意protoc版本要统一
1. 查看生成.pb文件的protoc版本(编译环境)
	protoc --version
	
2. 比如原始编译版本是3.19.1,在官网下载对应版本

3. 按照如下命令安装

	cd protobuf-xxx
	./autogen.sh
	./configure
	make			// 耗时较长
	make check		// 非必须
	sudo make install
	sudo ldconfig

4. 其他问题

  • 如果更新的protoc版本和头文件编译版本不匹配,可能编译会报如下错误

xxx.pb.h: #error this file was generated by an older version of protoc …
#error incompatible with your Protocol Buffer headers.
#error please regenerate this file with a newer version of protoc

  • 解决办法

    卸载protoc重新安装指定版本,指定版本下载安装上面介绍过了

  • protobuf的卸载

sudo apt-get remove libprotobuf-dev

which protoc	// 查看可执行文件路径

sudo rm /usr/local/bin/protoc  			// 删执行文件
										//(也可能是/usr/bin/protoc)
sudo rm -rf /usr/local/include/google 	//头文件

sudo rm -rf /usr/local/lib/libproto* 	//库文件

  • sudo ldconfig,动态链接库为系统所共享,即应用程序能正确找到相关链接库文件。不执行这步可能报错:

protoc: error while loading shared libraries: libprotoc.so.23: cannot open shared object file: no such file or directory


参考文章:
protobuf安装命令
ubuntu18.04安装最新版本protobuf
protobuf卸载1
protofbuf卸载2

created by shuaixio, 2021.11.24

这个错误通常出现在使用Protocol Buffers(protobuf)库进行编译时,表示编译器找到指定的文件。要解决这个问题,可以尝试以下几种方法: 1. **检查protobuf安装**: 确保你已经正确安装了protobuf库。如果还没有安装,可以使用包管理工具进行安装,例如在Ubuntu上可以使用以下命令: ```sh sudo apt-get install libprotobuf-dev protobuf-compiler ``` 2. **设置包含路径**: 确保编译器的包含路径中包含protobuf头文件路径。你可以在编译命令中添加`-I`选项来指定包含路径,例如: ```sh g++ -std=c++11 -I/usr/include -I/usr/local/include your_code.cpp -lprotobuf -o your_program ``` 3. **检查文件路径**: 确认`google/protobuf/port_def.inc`文件确实存在于你的系统中。你可以使用以下命令查找文件: ```sh find /usr -name "port_def.inc" ``` 4. **重新安装protobuf**: 如果文件确实存在但仍然报错,尝试重新安装protobuf库: ```sh sudo apt-get remove libprotobuf-dev protobuf-compiler sudo apt-get install libprotobuf-dev protobuf-compiler ``` 5. **检查CMake配置**: 如果你使用CMake进行构建,确保在`CMakeLists.txt`中正确设置了protobuf的包含路径和库路径,例如: ```cmake find_package(Protobuf REQUIRED) include_directories(${Protobuf_INCLUDE_DIRS}) link_directories(${Protobuf_LIBRARY_DIRS}) target_link_libraries(your_target ${Protobuf_LIBRARIES}) ``` 通过以上方法,你应该能够解决这个编译错误。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值