2016-11-08 73 views
1

我正嘗試將libprotobuf鏈接到我的項目。爲了做到這一點,我已經編譯libprotobuf到一個動態庫,這是我的庫路徑。無法鏈接到標準庫

然而,隨着/MD編譯時,我從連接器收到以下錯誤:

3>libprotobuf.lib(int128.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in component.obj [C:\Projekte\P3D-ECS\p3d_e 

於是,我改變了標誌從/MD/MT,和那些消失了。然而,現在連接失敗時與標準庫鏈接,並不能找到符號像std::basic_ostream,用了很多的錯誤是這樣的:

error LNK2001: unresolved external symbol "__declspec(dllimport) public: __int64 __cdecl std::basic_streambuf<char,struct std::char_traits<char> >::sputn(char const *,__int64)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]) 

我已經嘗試添加libcmtMSVCRT我的鏈接的相關性,但沒有成功。

看來,我的DLL只是無法編譯/MT標誌,無論鏈接libprotobuf或不。 我錯過了什麼?

+0

你是否(重新)構建*所有*與CRT動態鏈接? –

+0

是的,我刪除了整個構建文件夾,並做了一個乾淨的重建 - 沒有任何改變 – tobspr

+0

你確定每個庫和exe是用/ MD(或/ MDd在調試中)構建的,即動態鏈接到CRT?你的錯誤消息似乎暗示了靜態鏈接和動態鏈接之間的不匹配...... –

回答

1

通過protobuf的CMakeLists看完後,我發現了以下解決方案:

-Dprotobuf_MSVC_STATIC_RUNTIME=OFF 

必須傳遞給CMake的命令,使protobuf的使用/MD代替/MT