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.12.3,在官网下载对应版本
https://pypi.org/project/protobuf/

3. 按照如下命令安装

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

重新编译cartographer,如果报错,往下看。

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
这这个这个问题这个问题不这个问题不够这个问题不够具这个问题不够具体这个问题不够具体,这个问题不够具体,需要这个问题不够具体,需要提这个问题不够具体,需要提供这个问题不够具体,需要提供更这个问题不够具体,需要提供更多这个问题不够具体,需要提供更多的这个问题不够具体,需要提供更多的上这个问题不够具体,需要提供更多的上下这个问题不够具体,需要提供更多的上下文这个问题不够具体,需要提供更多的上下文和这个问题不够具体,需要提供更多的上下文和细这个问题不够具体,需要提供更多的上下文和细节这个问题不够具体,需要提供更多的上下文和细节信息这个问题不够具体,需要提供更多的上下文和细节信息才这个问题不够具体,需要提供更多的上下文和细节信息才能这个问题不够具体,需要提供更多的上下文和细节信息才能给这个问题不够具体,需要提供更多的上下文和细节信息才能给出这个问题不够具体,需要提供更多的上下文和细节信息才能给出具这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项、这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项、更新这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项、更新编这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项、更新编译这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项、更新编译环这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项、更新编译环境这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项、更新编译环境等这个问题不够具体,需要提供更多的上下文和细节信息才能给出具体的答案。一般来说,“编译找不到”可能是指编译器无法找到所需的文件、库或依赖项,常见的解决方法是检查相关路径配置、安装缺失的依赖项、更新编译环境等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值