首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC2005中添加库后编译不通过,多谢

2012-01-19 
VC2005中添加库后编译不通过,谢谢VC2005中,添加一个库“Chilkat C/C++ Libraries for VC++ 8.0 / Win32”(主

VC2005中添加库后编译不通过,谢谢
VC2005中,添加一个库“Chilkat C/C++ Libraries for VC++ 8.0 / Win32”(主要想用其CSV类)后,编译出现如下问题:
//工程1
1:环境配置中,Release版,为使在发布时防止.dll缺失,用的是static编译
  MFC的使用 - Use MFC in a Static Library
  C++ Code生成的Runtime Library - /MT
就会出现 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)....
  _wcscmp已经在libcmt.lib(wcscmp.obj)定义
  _strchr...等待函数已定义错误

2:如果把Runtime Library改为/MD,就会出现Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version错误

3:如果把MFC的使用改为Using MFC in a shared DLL,出现警告 LINK : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;使用 /NODEFAULTLIB:library,而且在发布后不能确定是否会出现缺失dll现象

//工程2
但:新建个MFC工程,如上使用库“Chilkat C/C++ Libraries for VC++ 8.0 / Win32”时,出现的问题却和上面的工程1出现的问题刚好相反,问题1和问题2错误刚好相反

//工程3
建个Win32程序,正常

问题:
1.Using MFC in a shared DLL 和 Use MFC in a Static Library 两种链接方式到底有什么区别呢?对Release版来说,哪种方式更好啊(有可能出现dll缺失情况)?
2.工程1链接的库不止一个,这问题该怎么解决啊?

[解决办法]
Use MFC in a Static Library 会把用到的mfc库文件都打包到生成的目标文件中 所以生成的目标文件一般比 Using MFC in a shared DLL 要大很多 而Using MFC in a shared DLL 就是共享dll, 运行目标文件时 就调用所在机器上的mfc库 所以如果电脑上没装vc stduio ,如果你用shared DLL 的话 那么就无法运行 用静态dll的就能
[解决办法]
至于你发布 Release后 用什么那就看你怎么用了 Static Library 缺点是目标文件大 shared DLL是很多情况没有mfc库的电脑上运行不了。

你的第2个问题我不清楚 但是我遇到过这样一种情况 就是你的主进程在调用某个dll 时候如果2者的Runtime Library不一样 且内存从一个中申请在另一个中释放 那么会有问题 因为Runtime Library不一样 内存的管理是不一样的 这个在msdn中能查到

热点排行