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个错误:
这个应该是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后就变成:
之前的error变成了warning。程序也能编译通过正常运行了。至于忽略这些错误后会有什么影响等将来还会进行测试跟踪。至少目前建立数据库文件和建立新表等操作都是正常的。
最新版本的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。程序也能编译通过正常运行了。至于忽略这些错误后会有什么影响等将来还会进行测试跟踪。至少目前建立数据库文件和建立新表等操作都是正常的。
相关文章推荐
- 在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
- 在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
- 关于VC60中创建MFC工程时, 使用了UNICODE选项后编译报错的解决方法
- C 和 C++ 混合代码 cmath编译出错
- 关于C和C++混合编译出错的解决方法
- MongoDB在MFC下使用C++驱动编译错误的解决
- C++工程代码打包的dll在C#工程上使用注意点!变量对应关系与dll调用出错情况。
- vs2015 编译后出错 编译器失败,错误代码为 -532462766 解决办法
- Eclipse使用andmore插件打开ADT插件创建的android工程出错解决办法
- C/C++/MFC 编译运行错误解决方法收集error
- 使用px4编译代码时出现“no module names site”错误的解决办法
- 解决WINCE6.0新建工程编译出错的问题
- g++ 编译链接C++代码, 生成与使用静态库和动态库
- VS2010 MFC工程的MFC库使用方式与运行时库不一致引起的编译问题
- 使用SSD目标检测c++接口编译问题解决记录
- FreeRTOSv9.0.0版本WIN32-MSVC工程使用VisualStudio2012编译报错解决
- 使用代码检查工具解决C++潜在的bug
- 将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005)
- c++使用thread类时编译出错,对‘pthread_create’未定义的引用
- VC使用技巧:让你团队里所有人在编译工程时都要看你的代码注释