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版本要統(tǒng)一
1. 查看生成.pb文件的protoc版本(編譯環(huán)境)
protoc --version
2. 比如原始編譯版本是3.12.3,在官網(wǎng)下載對(duì)應(yīng)版本
https://pypi.org/project/protobuf/
3. 按照如下命令安裝
cd protobuf-xxx
./autogen.sh
./configure
make // 耗時(shí)較長(zhǎng)
make check // 非必須
sudo make install
sudo ldconfig
重新編譯cartographer,如果報(bào)錯(cuò),往下看。
4. 其他問題
如果更新的protoc版本和頭文件編譯版本不匹配,可能編譯會(huì)報(bào)如下錯(cuò)誤
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重新安裝指定版本家淤,指定版本下載安裝上面介紹過(guò)了
protobuf的卸載
sudo apt-get remove libprotobuf-dev
which protoc // 查看可執(zhí)行文件路徑
sudo rm /usr/local/bin/protoc // 刪執(zhí)行文件
//(也可能是/usr/bin/protoc)
sudo rm -rf /usr/local/include/google //頭文件
sudo rm -rf /usr/local/lib/libproto* //庫(kù)文件
sudo ldconfig,動(dòng)態(tài)鏈接庫(kù)為系統(tǒng)所共享瑟由,即應(yīng)用程序能正確找到相關(guān)鏈接庫(kù)文件絮重。不執(zhí)行這步可能報(bào)錯(cuò):
protoc: error while loading shared libraries: libprotoc.so.23: cannot open shared object file: no such file or directory
參考文章
https://blog.csdn.net/baidu_35692628/article/details/121526178