項目之前使用的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)
問題解決,不妨一試!