`

MS VC6 链接错误处理

    博客分类:
  • VC
阅读更多

MS VC6 链接错误处理


在Windows XP下编译的软件,放到Windows 2000上使用时,跳出了"无法找到动态链接库MSVCRTD.dll"的提示,后来还是直接将MSVCRTD.dll从WinXP系统目录下copy过来使用来解决问题的。


不过在解决问题过程中,有其他意外收获,现在记下来,说不定以后可参考一二。


刚开始时,我将MFC DLL改为静态库链接,编译,出现如下结果:


MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _realloc already defined in libcmt.lib(realloc.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _free already defined in libcmt.lib(free.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in libcmt.lib(malloc.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strchr already defined in libcmt.lib(strchr.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sprintf already defined in libcmt.lib(sprintf.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _tolower already defined in libcmt.lib(tolower.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _getenv already defined in libcmt.lib(getenv.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _toupper already defined in libcmt.lib(toupper.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __isctype already defined in libcmt.lib(isctype.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _atoi already defined in libcmt.lib(atox.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strstr already defined in libcmt.lib(strstr.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _calloc already defined in libcmt.lib(calloc.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strncpy already defined in libcmt.lib(strncpy.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strncmp already defined in libcmt.lib(strncmp.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _memmove already defined in libcmt.lib(memmove.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strtoul already defined in libcmt.lib(strtol.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strtol already defined in libcmt.lib(strtol.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fclose already defined in libcmt.lib(fclose.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _ungetc already defined in libcmt.lib(ungetc.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __errno already defined in libcmt.lib(dosmap.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sscanf already defined in libcmt.lib(sscanf.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _setlocale already defined in libcmt.lib(setlocal.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _printf already defined in libcmt.lib(printf.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _localtime already defined in libcmt.lib(localtim.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _time already defined in libcmt.lib(time.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fflush already defined in libcmt.lib(fflush.obj)

MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __strdup already defined in libcmt.lib(strdup.obj)


LINK : warning LNK4098: defaultlib "MSVCRTD" conflicts with use of other libs; use /NODEFAULTLIB:library


..\..\Output\Release/FirewallMan.exe : fatal error LNK1169: one or more multiply defined symbols found


Error executing link.exe.


相信一个善良的人对上面的错误不会熟视无睹的,我的解决方法当然是对症下药:


Link->Category: Input->Ignore libraries:libcmt



clean后重新编译,还有下面的链接错误:


Linking...


nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv

nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc

nafxcw.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctype

nafxcw.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype

nafxcw.lib(dcprev.obj) : error LNK2001: unresolved external symbol __mbctype

nafxcw.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype


..\..\Output\Release/FirewallMan.exe : fatal error LNK1120: 3 unresolved externals


Error executing link.exe.


呵呵,这个错误真厉害,我用google搜索了一下,发现才3页,而且提出问题后后面基本上没有什么解决方法,其中我还硬着头皮看了俄语的链接,但遗憾的是从字面上看没有解答,而后上了微软网站,看到有提问,但是没有回答的。


后来尝试了很多方法,经过摸索,最后得出解决方法:


在Preprocessor中定义_AFXDLL


如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds


就这样改:


C/C++->Code Generation->Multithread DLL (即实现/MD选项)

分享到:
评论

相关推荐

    VC6连接sql server 2008的实例

    在本文中,我们将深入探讨如何使用Visual C++ 6.0(简称VC6)与Microsoft SQL Server 2008建立连接。这是一个重要的主题,因为理解如何在旧版开发环境中集成现代数据库技术对于许多开发者来说仍然是必要的。我们将...

    vc6.0连接SQL SERVER 实例

    4. **错误处理**:在与数据库交互时,应始终处理可能出现的错误。ADO提供了`GetErrorInfo`和`GetLastError`方法来获取错误信息。 5. **关闭连接**:完成操作后,记得关闭数据库连接以释放资源。可以使用`...

    VC6调用WebService

    5. **错误处理**:在调用Web Service时,必须处理可能出现的网络错误、解析错误或服务端错误。这通常通过检查返回值或异常处理来完成。 6. **数据转换**:XML数据通常需要进行解析和序列化,以便在C++对象和Web ...

    VC6.0连接Sql2008数据库

    在实际应用中,你还需要考虑错误处理和异常安全,使用`try-catch`块捕获可能出现的错误,并根据需要提供相应的反馈。此外,对于多线程应用,还需要考虑连接的线程安全性。 总的来说,VC6.0连接SQL Server 2008主要...

    VC连接SQL Server(\VC连接SQL Server)

    根据给定的文件信息,我们可以总结出以下关于“VC连接SQL Server”的相关知识点: ### 1. 使用VC++连接SQL Server的基本步骤 在VC++环境下连接SQL Server通常涉及到以下几个主要步骤: - **初始化COM库**:通过...

    VC连接ACCESS数据库范例演示

    7. **错误处理**:在实际编程中,应添加适当的错误处理代码,比如使用`AfxMessageBox`显示错误信息,或者使用`try/catch`块捕获异常。 这个“VC连接ACCESS数据库范例演示”应该包括上述所有步骤的详细说明和代码...

    VC+ADO+ORACLE连接

    除此之外,ADO还支持事务处理,错误处理,以及更复杂的SQL操作,如存储过程的调用。对于初学者来说,理解并掌握这些基本概念和用法是迈进数据库编程的第一步。 标签中提到的"ADO数据库"是指使用ADO进行数据库操作,...

    vc6_sql.rar_vc6_sql

    5. **异常处理**:在数据库操作中,错误处理是非常重要的,本教程可能会讲解如何在VC6中捕获和处理数据库操作异常。 6. **用户界面设计**:结合MFC(Microsoft Foundation Classes)库,创建用于输入和显示数据库...

    VC连接SQL Server数据库小例子

    在本文中,我们将深入探讨如何使用Visual C++(VC)2010通过ADO(ActiveX Data Objects)连接到SQL Server数据库。这是一个基础但实用的例子,不仅适用于SQL Server,还可以稍加修改以适应Oracle或MySQL等其他数据库...

    使用VC6进行ADO编程.rar_ADO_VC6_VC6 ado_ado vc

    在提供的文档“使用VC6进行ADO编程.doc”中,可能详细讲解了这些步骤,并可能包括错误处理、事务管理、参数化查询等高级主题。而“www.pudn.com.txt”可能是下载资源来源的说明或者版权信息。 通过学习和实践这些...

    VC连接SQL数据库并实现各种功能

    在VC++环境中,连接SQL Server数据库并实现各种...需要注意的是,实际应用中还要考虑错误处理、事务管理、游标操作、批处理等更复杂的场景。同时,为了提高性能和安全性,应尽量优化SQL语句,避免SQL注入等安全问题。

    VC 操作oracle数据的例子程序

    VC程序还可能包含错误处理机制,以确保在数据库操作出错时能够妥善处理。 6. **结果集处理**:当执行查询后,程序会返回一个结果集。VC代码需要遍历结果集,读取并处理数据。这可以通过ADO的Recordset对象完成。 7...

    VC ADO连接数据库实例

    6. **错误处理**:在每个可能出错的地方,都应添加适当的错误处理代码,比如`try-catch`块。 ### 注意事项 - ADO操作通常涉及COM对象,需要正确管理对象的生命周期,防止内存泄漏。 - 数据库操作应尽可能使用参数...

    VC6.0连接sqlserver2005

    6. **错误处理和调试**:在实际操作中,可能会遇到各种错误,如网络问题、权限问题或数据库配置错误。确保正确处理这些异常,通过日志或调试器进行排查。 通过以上步骤,你应该能够在VC6.0中成功连接到SQL Server ...

    VC6.0连接SQL数据库的方法

    在本文中,我们将深入探讨如何在Microsoft Visual C++ 6.0(简称VC6.0)环境下使用ODBC和ADO技术来连接并操作SQL Server 2000数据库。这两种方法都是C++开发者常用的数据访问接口,使得应用程序能够与数据库进行交互...

    VC使用ADO连接Oracle数据库

    在VC++环境中,使用ADO(ActiveX Data Objects)来连接Oracle数据库是一种常见的方法。ADO是Microsoft提供的一个数据访问接口,它允许程序员...不过,实际应用中还需要考虑错误处理、事务管理和性能优化等高级话题。

    VC_中连接Oracle数据库的几种方法

    ### VC_中连接Oracle数据库的几种方法 #### 引言 随着信息技术的不断发展,数据库管理系统在各类信息系统中的地位越来越重要。Oracle数据库作为一种广泛使用的数据库系统,以其强大的功能、优秀的性能及高安全性...

    VC 使用 ADO连接的例程

    同时,该函数中包含了异常处理机制,以便在连接失败时能够给出错误提示。 在析构函数`~CTestadoView()`中,确保在程序退出前关闭并释放`Connection`对象,以释放资源并避免内存泄漏。 为了实现数据库操作,比如...

    VC Ado连接 sql server 数据库

    在Microsoft Visual C++ (VC) 开发环境中,ADO(ActiveX Data Objects)是连接到SQL Server数据库的一个常用方法。ADO提供了一种简单而高效的接口,允许开发者通过编程访问数据库,执行查询,插入、更新和删除数据。...

Global site tag (gtag.js) - Google Analytics