天天看點

使用Crypto++庫編譯出錯 解決辦法

錯誤資訊:

1 1>------ 已啟動生成: 項目: testCrypto++, 配置: Debug Win32 ------
 2 1>正在編譯...
 3 1>main.cpp
 4 1>正在連結...
 5 1>cryptlib.lib(rijndael.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
 6 1>cryptlib.lib(rijndael.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
 7 1>cryptlib.lib(rijndael.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
 8 1>cryptlib.lib(rijndael.obj) : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
 9 1>cryptlib.lib(rijndael.obj) : error LNK2005: "public: static unsigned int __cdecl std::char_traits<char>::length(char const *)" (?length@?$char_traits@D@std@@SAIPBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
10 1>cryptlib.lib(cryptlib.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
11 1>cryptlib.lib(cryptlib.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
12 1>cryptlib.lib(cryptlib.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
13 1>cryptlib.lib(cryptlib.obj) : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
14 1>cryptlib.lib(cryptlib.obj) : error LNK2005: "public: static unsigned int __cdecl std::char_traits<char>::length(char const *)" (?length@?$char_traits@D@std@@SAIPBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
15 1>cryptlib.lib(cryptlib.obj) : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl std::operator+<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *)" (??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
16 1>cryptlib.lib(filters.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
17 1>cryptlib.lib(filters.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
18 1>cryptlib.lib(filters.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
19 1>cryptlib.lib(filters.obj) : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
20 1>cryptlib.lib(filters.obj) : error LNK2005: "public: static unsigned int __cdecl std::char_traits<char>::length(char const *)" (?length@?$char_traits@D@std@@SAIPBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
21 1>cryptlib.lib(filters.obj) : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl std::operator+<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *)" (??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
22 1>cryptlib.lib(queue.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
23 1>cryptlib.lib(queue.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
24 1>cryptlib.lib(queue.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
25 1>cryptlib.lib(queue.obj) : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
26 1>cryptlib.lib(queue.obj) : error LNK2005: "public: static unsigned int __cdecl std::char_traits<char>::length(char const *)" (?length@?$char_traits@D@std@@SAIPBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
27 1>cryptlib.lib(algparam.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
28 1>cryptlib.lib(algparam.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
29 1>cryptlib.lib(algparam.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
30 1>cryptlib.lib(algparam.obj) : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
31 1>cryptlib.lib(algparam.obj) : error LNK2005: "public: static unsigned int __cdecl std::char_traits<char>::length(char const *)" (?length@?$char_traits@D@std@@SAIPBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
32 1>cryptlib.lib(algparam.obj) : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl std::operator+<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *)" (??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
33 1>cryptlib.lib(mqueue.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
34 1>cryptlib.lib(mqueue.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
35 1>cryptlib.lib(mqueue.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
36 1>cryptlib.lib(mqueue.obj) : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
37 1>cryptlib.lib(mqueue.obj) : error LNK2005: "public: static unsigned int __cdecl std::char_traits<char>::length(char const *)" (?length@?$char_traits@D@std@@SAIPBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
38 1>cryptlib.lib(mqueue.obj) : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl std::operator+<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *)" (??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
39 1>libcpmtd.lib(string.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
40 1>libcpmtd.lib(string.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
41 1>libcpmtd.lib(string.obj) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
42 1>libcpmtd.lib(string.obj) : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
43 1>libcpmtd.lib(string.obj) : error LNK2005: "public: static unsigned int __cdecl std::char_traits<char>::length(char const *)" (?length@?$char_traits@D@std@@SAIPBD@Z) 已經在 msvcprtd.lib(MSVCP90D.dll) 中定義
44 1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __aligned_malloc 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
45 1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __aligned_free 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
46 1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
47 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
48 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
49 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __cexit 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
50 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __amsg_exit 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
51 1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: __initterm_e 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
52 1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
53 1>LIBCMTD.lib(setlocal.obj) : error LNK2005: __configthreadlocale 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
54 1>LIBCMTD.lib(tidtable.obj) : error LNK2005: __encode_pointer 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
55 1>LIBCMTD.lib(tidtable.obj) : error LNK2005: __decode_pointer 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
56 1>LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
57 1>LIBCMTD.lib(crt0.obj) : error LNK2005: _mainCRTStartup 已經在 MSVCRTD.lib(crtexe.obj) 中定義
58 1>LIBCMTD.lib(errmode.obj) : error LNK2005: ___set_app_type 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
59 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_a 已經在 MSVCRTD.lib(cinitexe.obj) 中定義
60 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_z 已經在 MSVCRTD.lib(cinitexe.obj) 中定義
61 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_a 已經在 MSVCRTD.lib(cinitexe.obj) 中定義
62 1>LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_z 已經在 MSVCRTD.lib(cinitexe.obj) 中定義
63 1>LIBCMTD.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
64 1>LIBCMTD.lib(invarg.obj) : error LNK2005: __invalid_parameter 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
65 1>LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
66 1>LIBCMTD.lib(mlock.obj) : error LNK2005: __lock 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
67 1>LIBCMTD.lib(mlock.obj) : error LNK2005: __unlock 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
68 1>LIBCMTD.lib(dbgrptw.obj) : error LNK2005: __CrtDbgReportW 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
69 1>LINK : warning LNK4098: 預設庫“MSVCRTD”與其他庫的使用沖突;請使用 /NODEFAULTLIB:library
70 1>LINK : warning LNK4098: 預設庫“LIBCMTD”與其他庫的使用沖突;請使用 /NODEFAULTLIB:library
71 1>C:\Users\Administrator\Documents\Visual Studio 2008\Projects\test\Debug\testCrypto++.exe : fatal error LNK1169: 找到一個或多個多重定義的符号
72 1>生成日志儲存在“file://c:\Users\Administrator\Documents\Visual Studio 2008\Projects\test\testCrypto++\Debug\BuildLog.htm”
73 1>testCrypto++ - 65 個錯誤,2 個警告
74 ========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========      

錯誤原因:crypto++庫是MTD模式下的,而vs2008的預設運作時庫是多線程MDd

解決辦法:項目屬性--配置屬性--C/C++--代碼生成  運作時庫修改為:多線程調試DLL(/MTd)

關于運作時庫的詳細說明請