Windows平台GRPC C++构建/链接问题求助
解决GRPC C++项目未解析外部符号问题
以下是针对你遇到的问题的具体排查和解决步骤:
务必添加GRPC相关依赖库到链接器输入
未解析外部符号最常见的原因就是没链接对应的库。在Visual Studio项目属性里,找到「链接器 -> 输入 -> 附加依赖项」,添加必要的库文件:- Release版本:
grpc++.lib、grpc.lib、protobuf.lib、gpr.lib、zlib.lib - Debug版本:
grpc++_d.lib、grpc_d.lib、protobufd.lib、gpr_d.lib、zlibd.lib
注意要和你编译GRPC时选择的Debug/Release版本严格对应,别混加。
- Release版本:
检查编译架构一致性
确认你编译GRPC时用的是x86还是x64,项目的平台设置(比如VS顶部的解决方案平台)必须和GRPC的编译架构完全一致。一个用x64编译的GRPC库,没法和x86的项目链接,必然会出未解析符号。验证proto文件生成与编译
确保你生成grpc代码时用对了插件,生成的.grpc.cc和.grpc.h文件都正确添加到了项目中,并且没有被设置为「不参与编译」。可以右键项目里的proto生成文件,查看属性里的「常规 -> 项类型」是不是「C/C++编译器」。核对Include和Library路径的准确性
你安装GRPC到C:\libs\grpc\grpc,那Include目录应该指向C:\libs\grpc\grpc\include,Library目录要指向对应架构的lib文件夹,比如x64的话是C:\libs\grpc\grpc\lib\x64,别只填到C:\libs\grpc\grpc,这样编译器找不到头文件和库文件的具体位置。匹配运行时库设置
打开项目属性的「C/C++ -> 代码生成 -> 运行时库」,确保这个选项和你编译GRPC时的设置一致:- 如果GRPC用的是「多线程DLL (/MD)」,项目也设成/MD;如果是「多线程调试DLL (/MDd)」,项目就设成/MDd,不一致的话链接阶段会出现大量符号错误。
内容的提问来源于stack exchange,提问作者Darc
相关产品推荐
相关产品推荐

