您的位置:首页 > 数据库

MFC工程中使用sqlite3源代码--c和c++代码混合编译出错解决

2011-08-02 10:03 1211 查看
网上下载的sqlite3现成的dll是win32位的,而由于我正在写的程序是64位的,所以将网上下的sqlite3的源代码直接加载到工程中使用了。

最新版本的sqlite3源文件只有一个.h和.c文件,比以前用起来方便多了。

在这2个文件的Property -> c/c++ -> Precompiled Headers 中设置为Not Using Precompiled Headers并build后,出现了4个错误:

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned __int64)" (??2@YAPEAX_K@Z) already defined in LIBCMTD.lib(new.obj)
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPEAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned __int64)" (??_U@YAPEAX_K@Z) already defined in LIBCMTD.lib(new2.obj)
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPEAX@Z) already defined in LIBCMTD.lib(delete2.obj)
fatal error LNK1169: one or more multiply defined symbols found


这个应该是c和c++在编译的时候调用了不同的类库导致的冲突。在google及msdn一番以后,在msdn中找到了解决方法:

Linker Tools Error LNK1169

one or more multiply defined symbols found

The build failed due to multiple definitions of one or more symbols. This error is preceded by error LNK2005.

The /FORCE or /FORCE:MULTIPLE option overrides this error.

于是在project -> Properties -> Linker -> Command Line中添加 /force命令,重新build后就变成:

1>LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/FORCE' specification
1>uafxcwd.lib(afxmem.obj) : warning LNK4006: "void * __cdecl operator new(unsigned __int64)" (??2@YAPEAX_K@Z) already defined in LIBCMTD.lib(new.obj); second definition ignored
1>uafxcwd.lib(afxmem.obj) : warning LNK4006: "void __cdecl operator delete(void *)" (??3@YAXPEAX@Z) already defined in LIBCMTD.lib(dbgdel.obj); second definition ignored
1>uafxcwd.lib(afxmem.obj) : warning LNK4006: "void * __cdecl operator new[](unsigned __int64)" (??_U@YAPEAX_K@Z) already defined in LIBCMTD.lib(new2.obj); second definition ignored
1>uafxcwd.lib(afxmem.obj) : warning LNK4006: "void __cdecl operator delete[](void *)" (??_V@YAXPEAX@Z) already defined in LIBCMTD.lib(delete2.obj); second definition ignored
1>warning LNK4088: image being generated due to /FORCE option; image may not run


之前的error变成了warning。程序也能编译通过正常运行了。至于忽略这些错误后会有什么影响等将来还会进行测试跟踪。至少目前建立数据库文件和建立新表等操作都是正常的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: