我正在嘗試使用 VS 2022 將 Google Firebase/Firestore 添加到現有的 Windows C 桌面應用程式。我已經下載并安裝了最新版本的 Firebase C SDK。
我在我的應用程式中添加了一些非常簡單的 Firebase 代碼,只是為了測驗系統構建是否正常。代碼編譯得很好,我遇到了很多我無法解決的鏈接錯誤。它們似乎都與標準庫的使用有關。
這是代碼:
#include "firebase/firestore.h"
void TestFirestore()
{
firebase::App *app = firebase::App::Create();
firebase::firestore::Firestore *db =
firebase::firestore::Firestore::GetInstance();
}
這編譯沒有問題,但產生了大約 100 個鏈接錯誤 - 丟失和重復的符號,例如:
msvcprtd.lib (MSVCP140D.dll) : error LNK2005:
"public: int __thiscall std::ios_base::flags(void)const " (?flags@ios_base@std@@QBEHXZ)
already defined in firebase_firestore.lib
(7ba01613985f32fe50e0c125a0414f54_firebase_firestore.dir_Debug_document_reference.obj)
firebase_app.lib (d3d7d08a438878e74aeb2cbaaedfc967_flatbuffers.dir_Debug_util.obj) :
error LNK2001: unresolved external symbol
"private: static int std::locale::id::_Id_cnt" (?_Id_cnt@id@locale@std@@0HA)
我靜態鏈接到使用 VS 2019 和 C 11 構建的 Firebase C SDK 提供的預構建 x86 庫。我正在使用 C 14 使用 VS 2022。(我很樂意使用 C 11,但 VS 不再支持 C 11)。
無論如何,根據這個答案Is it safe to link C 17, C 14, and C 11 objects,C 11 和 C 14 應該具有 ABI 兼容性,應該沒有問題將兩者聯系起來,前提是它們使用相同的編譯器。
因此,當使用 VS 2109 構建 Firebase SDK 時,使用 VS 2022 是否存在問題。根據我讀過的所有內容,這應該沒問題,但是我不知道是什么導致了上述錯誤。為了確定,我可以降級到 2019 年,但設定我當前的構建環境是一項不平凡的任務,而且微軟很難安裝除最新版本的 VS 之外的任何東西。
任何幫助或建議將不勝感激。
uj5u.com熱心網友回復:
原來問題是 MSVC 編譯器中的一個錯誤!如本期所述,VS 開發團隊破壞了本文中承諾的二進制向后兼容性。
通過升級到最新版本的編譯器 - 17.3.x 或更高版本解決了該問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/516301.html
標籤:Google Cloud Collective 视窗火力基地c 11C 14
上一篇:復制變數、創建臨時變數和移動語意
