静态mfc中使用sqlite3出现链接不了的问题

时间:2022-06-01 12:59:53
一个奇怪的问题,工程选项MFC选项设置为静态时编译出现下列问题:
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 libcmtd.lib(typinfo.obj) 中定义
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 libcmtd.lib(typinfo.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: _free 已经在 libcmtd.lib(dbgfree.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: _malloc 已经在 libcmtd.lib(dbgmalloc.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: _realloc 已经在 libcmtd.lib(dbgrealloc.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: __msize 已经在 libcmtd.lib(dbgheap.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: _rand_s 已经在 libcmtd.lib(rand_s.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: _memmove 已经在 libcmtd.lib(memmove.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: __localtime64_s 已经在 libcmtd.lib(loctim64.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: __beginthreadex 已经在 libcmtd.lib(threadex.obj) 中定义
1>msvcrtd.lib(MSVCR110D.dll) : error LNK2005: __endthreadex 已经在 libcmtd.lib(threadex.obj) 中定义
1>libcmtd.lib(crt0init.obj) : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>E:\CODE\sqlitetest\Debug\test.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
1>
1>生成失败。


然后将工程选项中的MFC选项改为共享DLL中使用MFC,此时编译成功。为什么使用静态MFC就编译不了出现这些问题,我编的是一个sqlite数据库的测试程序,头文件包含sqlite3.h,库文件包含sqlite3.lib,sqlite3.def,sqlite3.dll,sqlite3.h,sqlite3.lib均保存在工程目录下。编译提示的意思是和其他库冲突了吗?如何解决啊?

3 个解决方案

#1


有高手吗?先自己顶一下帖

#3


谢谢@zgl7903 发出的链接,在链接上找到了解决方法。具体原因是自行编译的lib库运行库是MD/Release,而自己的程序是MT/Debug。所以会出现运行库冲突,我的解决方法是修改lib运行库为MT/Release,程序为MT/Release。编译成功!再次感谢@zgl7903 !

#1


有高手吗?先自己顶一下帖

#2


#3


谢谢@zgl7903 发出的链接,在链接上找到了解决方法。具体原因是自行编译的lib库运行库是MD/Release,而自己的程序是MT/Debug。所以会出现运行库冲突,我的解决方法是修改lib运行库为MT/Release,程序为MT/Release。编译成功!再次感谢@zgl7903 !