VC6静态编译的一个问题
2006-12-19 22:10
459 查看
今天做了一件值得高兴的事情。
在用VC6编程的过程中,经常遇到这么一个问题,如果将设置改为Use MFC in a Static Library,则常常因为两个库中new和delete操作符的重复定义而导致LINK2005号错误不能生成执行文件,而改为动态库就没有问题了。CSDN上有的人说将设置中C/C++|Code Generation->Use runtime library改为多线程就可以解决,实际我试过多次,是不行的。今天安静下来仔细试了一下,发现原因可能如下:
对于包含在工程中的没有使用MFC库的自己的程序,如自己定义的通用的类文件,如果使用静态连接,需要在类的源文件中包含#include "stdafx.h"就可以解决这个问题,而如果使用动态库,则不用该包含。
其实仔细想想,stdafx.h中是包含了一些微软的自己的类定义如afxwin.h等。既然都是自己定义的通用的类库,则不一定要用VC来进行编译,若采用其它的编译器,写#include "stdafx.h"肯定是错的。但既然微软已经这么做了,我们要用也没有什么办法,这个应该也可以算是VC编译器的一个bug吧。
在用VC6编程的过程中,经常遇到这么一个问题,如果将设置改为Use MFC in a Static Library,则常常因为两个库中new和delete操作符的重复定义而导致LINK2005号错误不能生成执行文件,而改为动态库就没有问题了。CSDN上有的人说将设置中C/C++|Code Generation->Use runtime library改为多线程就可以解决,实际我试过多次,是不行的。今天安静下来仔细试了一下,发现原因可能如下:
对于包含在工程中的没有使用MFC库的自己的程序,如自己定义的通用的类文件,如果使用静态连接,需要在类的源文件中包含#include "stdafx.h"就可以解决这个问题,而如果使用动态库,则不用该包含。
其实仔细想想,stdafx.h中是包含了一些微软的自己的类定义如afxwin.h等。既然都是自己定义的通用的类库,则不一定要用VC来进行编译,若采用其它的编译器,写#include "stdafx.h"肯定是错的。但既然微软已经这么做了,我们要用也没有什么办法,这个应该也可以算是VC编译器的一个bug吧。
相关文章推荐
- 我把一个VC6的工程转换为VS2008的工程后,编译总是出现找不到而且不能升级vc90.pdb文件的问题,error C2471--解决办法 2010-9-16 15:01
- [转][VC/MFC]GDI+的一个编译问题
- VS2015编译zlibvc时的一个问题
- vc编程中遇到一个编译问题,原来是少了LIB文件 (ZT)
- 我把一个VC6的工程转换为VS2008的工程后,编译总是出现找不到而且不能升级vc90.pdb文件的问题,error C2471--解决办法
- VC下 Runtime 版本不同原因引起的一个编译问题案例
- gsl在vc下编译时一个问题
- [VC/MFC]GDI+的一个编译问题解决方案
- vc.net中MFC静态与动态链接问题与release方式编译
- vc.net中MFC静态与动态链接问题与release方式编译
- 一个VC6的工程转换为VS2008的工程后,编译找不到而且不能升级vc90.pdb文件的问题解决方法 2010-9-28 14:00
- 一个关于OpenCV2.2静态编译时无法用cvCaptureFromFile读取文件的问题
- 64位系统上设置编译平台为x86的项目编译在特定的情况下比如当一个窗体上放有包含了图像的ImageList之后,ResGen就会产生这种问题
- 使用VC2005编译真正的静态Qt程序
- VC 程序只运行一个进程,再次运行传参数给第一个进程的问题
- Cmake调用NSIS(一个可执行文件,其实就是一个编译器)编译NSIS脚本问题研究
- 《Android系统学习》第七章:Android4.0.1在ubuntu12.04编译的一个问题
- 一个真正的Singleton[涉及DLL类静态成员问题]
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 关于 vc编译程序 脱离 vc环境运行的问题 (新手)