更新protobuf版本后,出现google::protobuf::Any LNK2001等类似错误

项目之前使用的protobuf版本为3.6.1,之后更新到3.12.1版本。
使用的地方构建时出现了众多LNK2001找不到 google::protobuf::Any的链接错误:
error LNK2001:无法解析的外部符号“const google::protobuf::Any:: 'vtable'” (??_7Any@protobuf@google@@6B@)

出现链接问题的根源在于找不到对应数据结构或者函数的定义或实现,要么就是cpp实现文件没有加到工程解决方案中,要么就是链接的lib中没有定义。
我这里使用的是链接lib的方式,由于google::protobuf::Any是protobuf库基本数据类型,于是猜测就是libprotobuf*.lib存在问题。

重新编译构建protobuf,但是问题依旧存在。

最终解决
新版本的库由于新加入一些新的特性,所以最好阅读一下新的帮助手册。
protobuf3.12.1需要加入预处理宏定义PROTOBUF_USE_DLLS
如果使用CMAKE构建,可以在CMakeLists.txt中加入:ADD_DEFINTIONS(-DPROTOBUF_USE_DLLS)

问题解决,不妨一试!

posted on 2020-06-04 11:48  我来乔23  阅读(1441)  评论(0编辑  收藏  举报

导航