能力值:
( LV2,RANK:10 )
|
-
-
2 楼
在vc6里面 控制台的程序 工程里面设置为mfc为静态连接 编译通过.
在vc2005里面同样设置 死活不给通过...
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
那是c runtime lib的问题,你看看你哪里设置错误了?
我这里编译没有问题.
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
把你的工程配置截图发上来看看?或者你把工程打包发上来.
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
最好不要在2005中直接打开vc6的工程
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
问题出在那个预编译头选项... 如果选择空项目则正常...默认的选项则不行...那这样子岂不是很麻烦吗? 问一下大家有好的办法吗? 请告诉小弟一下,谢谢~
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
有可能预编译头包含的文件连接的是share的c runtime 库,而静态连接MFC是连接的static的c runtime 库,不能同时在一个项目里面连接两个不同的c runtime 库.
===========华丽的转帖线============
从错误信息可以看出是msvcrt.lib和libcmt.lib库中重复定义了__isctype等符号。为什么会出现这样的问题呢?这就要从这两个库的作用说起了。
msvcrt.lib是VC中的Multithreaded DLL 版本的C运行时库,而libcmt.lib是Multithreaded的运行时库。在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文件用了Multithreaded DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。
告警信息的意思我们明白之后,就要找造成这个问题的原因了。在项目设置中我们可以看到当前项目使用的是Multithreaded非DLL版本的运行时库,这说明项目中还有其他文件用到了不是这个版本的运行时库。很显然,就是openssl的静态库。查看openssl中ms下的nt.mak,我们可以发现静态库版本中openssl使用编译开关/MD进行编译的,也就是说openssl静态库是默认用的Multithreaded DLL 版本的C运行时库。
原因找到了。那么解决方法,很明显有两个。总之就是将两个项目的运行时库统一。
简单的方式就是将项目的动态库修改为使用Multithreaded DLL 版本的C运行时库即可。
某些情况下你的项目可能不能改变当前的运行时库,你可以将openssl的nt.mak中的/MD开关修改为/MT然后重新编译openssl静态库就可以了。
VC中的C运行时库一共有6种,想了解更多信息可以参阅我先前翻译的文章。
Single-threaded (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded using DLL (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Debug Single-threaded (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
Debug Multithreaded (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
Debug Multithreaded using DLL (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
http://blog.csdn.net/vocanicy/archive/2008/05/15/2449691.aspx
http://blog.csdn.net/vocanicy/archive/2008/05/15/2449686.aspx
这两篇文章可能会对你有帮助.
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢... 看样子比vc6麻烦
|