Protobuf库链接错误:GetMetadataImpl符号未定义求助
编译Valhalla路由引擎时遭遇Protobuf链接错误:未定义符号
google::protobuf::Message::GetMetadataImpl 我是C++和CMake新手,近日编译Valhalla路由引擎项目时触发链接错误,提示:
google::protobuf::Message::GetMetadataImpl为未定义符号
错误信息显示,protoc生成的代码引用了该Protobuf运行时库函数,但链接器无法找到对应实现。
已完成的检查步骤
1. 库源文件检查
- 确认Protobuf头文件
/opt/homebrew/Cellar/protobuf/27.0/include/google/message.h中存在GetMetadataImpl的声明 - 通过macOS的
nm工具验证,libprotobuf.27.0.0.dylib库中包含该符号的实现
2. 编译器与库兼容性检查
- protoc版本(27.0)与Protobuf库版本(27.0)完全匹配,尝试降级到26.1版本后问题依旧
- protoc生成的头文件要求使用5.27版本库,但构建过程未触发版本错误,且无法找到对应版本的
libprotobuf
3. 库与项目链接检查
- 项目根CMakeLists.txt已定位到正确版本的protoc和libprotobuf,并设置了
valhalla_protobuf_targets变量,但项目中未实际引用该变量 - 尝试将
valhalla_protobuf_targets添加到目标链接配置中,问题仍未解决 cmake/ValhallaPkgConfig.cmake中已将Protobuf加入REQUIRE列表,但不确定该配置是否生效
内容的提问来源于stack exchange,提问作者Kevvv
相关产品推荐
相关产品推荐

