Keep on going, never give up.

error LNK2005: "public: void __thiscall

今天在VC 6上调试程序,使用到第三方库,链接时提示如下错误。

  • error LNK2005: "public: class ...
  • error LNK2005: "public: void __thiscall std::...
  • error LNK2005: _strstr already defined in LIBCMTD.lib
  • ...

和,

  • error:please use the /MD switch for _AFXDLL builds

错误,经查是编译环境设置差异引起。

一、error LNK2005: "public: class

经过检查是第三方库编译环境跟当前工程编译环境不同引起:

Project->C/C++->Code Generation->Use run-time library

下面有:

  • Single-Threaded(单线程静态链接库) ->LIBC.LIB
  • Multithreaded(多线程静态链接库) -> LIBCMT.LIB
  • Multithread DLL(多线程动态链接库) -> MSVCRT.DLL
  • Debug Single-Threaded(单线程静态链接库) -> LIBCD.LIB
  • Debug Multithreaded(多线程静态链接库) -> LIBCMTD.LIB
  • Debug Multithread DLL(多线程动态链接库) -> MSVCRTD.DLL

六个选项(上面三个是RELEASE设定,下面三个是DEBUG设定),该选项决定VC链接时使用的线程库,查看第三方库编译设置为/MD(也就是Multithreaded DLL),本工程则默认则是/MDd(也就是Debug Multithreaded DLL)编译。把本工程修改为Multithreaded DLL,又报告如下错误。

error:please use the /MD switch for _AFXDLL builds

二、error:please use the /MD switch for _AFXDLL builds

该错误,同样还是因为Use run-time library设置问题引起的。当前工程为调试模式,看来还是需要修改回去为Debug模式,Debug Multithreaded DLL,同时把第三方库编译设置也修改相同,再次编译通过。

以上修改注意,如果生成Release版本时,需要对应去统一设置。

三、Invalid address specified to RtlValidateHeap

该错误一般出现在EXE里删除通过DLL生成的对象时出现,还是因为DLL和EXE运行时库设置不统一引起的,可以检查是否DLL工程和EXE工程的Use run-time library设置是否统一。天缘在此问题上遇到过很多次。

四、附C/C++运行时库说明

1、C Runtime Library

开关 对应的库 版本
/MD MSVCRT.LIB 多线程DLL的Release版本
/MDd MSVCRTD.LIB 多线程DLL的Debug版本
/MT LIBCMT.LIB 多线程静态链接的Release版本
/MTd LIBCMTD.LIB 多线程静态链接的Debug版本
/clr MSVCMRT.LIB 托管代码和非托管代码混合
/clr:pure MSVCURT.LIB 纯托管代码

2、C++ Standard Library

开关 对应的库 版本
/MD MSVCPRT.LIB 多线程DLL的Release版本
/MDd MSVCPRTD.LIB 多线程DLL的Debug版本
/MT LIBCPMT.LIB 多线程静态链接的Release版本
/MTd LIBCPMTD.LIB 多线程静态链接的Debug版本

参考网址:

http://blog.csdn.net/techweb/article/details/1937308

http://www.yesky.com/20030320/1658358.shtml

更多文章:

Linux下C/C++编程访问MYSQL

Linux C/C++多线程pthread实例

VC++下使用ADO访问Access数据库完整篇

如何在VC++中创建快捷方式

基于XML-RPC的PING更新通知PHP编程实例

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.