源码自己编译MFC和ATL库
根据需要,需要重新编译MFC库。
预备条件:
当前目录为 将(以2005为例) C:\Program Files (x86)\Microsoft Visual Studio 8\VC 看做起步目录,后文等价为 $vcPath
1、将 $vcPath/bin 加入到 环境变量中(用后可删除),方便命令行执行 nmake 和 cl.exe 以及rc.exe 。
2、查阅 $vcPath/atlmfc/src 中 ,Readme.txt。主要命令是:
nmake /f atlmfc.mak [ALL | ATL | MFC] [CLEAN= ] [LIBNAME= ] [PLATFORM= ]
PLATFORM:选择范围为:INTEL, MIPS, ALPHA, AXP64, IA64, AMD64, or PPC.
其他则报错:makefile(286) : fatal error U1050: PLATFORM must be one of INTEL, MIPS, ALPHA, A
XP64, IA64, AMD64, or PPC.
3、调出命令行。执行 $vcPath/bin/vcvars32.bat x86 命令, 选择编译器的环境 为 vs2005 + x86。
4、执行到 $vcPath/Atlmfc/src 目录,执行2中的命令。根据需要适配参数。
nmake /f altmfc.mak ALL CLEAN=0 LIBNAME=MFC80_N_ PLATFORM=INTEL
5、执行成功后,
lib文件 在 $vcPath/atlmfc/lib中。
dll文件 在 $vcPath/atlmfc/src/mfc/你填入的平台文件夹内。
过程错误:
1、 : .“cl.exe” return code 0xc0000135
原因:在安装visual studio的时候没有勾选注册环境变量导致的。
解决:在系统环境变量中加入visual studio的安装路径:$vcPath\Bin, 及vs安装路径\Common7\IDE
2、 : . return code 0x2
原因:找不到代码文件中包含的头文件
解决:cmd下进入到vs安装路径\VC\Bin下,执行vcvars32,此时会执行vcvas32.bat自动为vs设置环境变量
3、
: . return code 0x460原因:你的工程中连接了一个lib文件,链接的时候却出现不能解析的外部符号。可能问题是你包含的lib是错的,或者有不兼容问题。我的问题就是后者,我的系统的32位的,但是链接了一个64位的lib.
解决:链接正确的lib
4、AssemblyInfo.cpp<78>: fatal error C1189: #eeor: Following information required to build private version
原因:程序集有不存在的目标,需要修改cpp文件。
$vcPath\atlmfc\src\mfcm\interfaces\AssemblyInfo.cpp
添加:line20: #define BUILD_PREBUILT //ifndef前面
修改: line 75~77
[assembly: AssemblyDelaySign(false)];
[assembly: AssemblyKeyFile("")];
[assembly: AssemblyKeyName("")];
5、wfrmcmd.cpp<248>: fatal error C1189: #eeor: Following information required to build private version
$vcpath\atlmfc\src\mfcm\wfrmcmd.cpp<251>: ...
line: 231 #define BUILD_PREBUILT //ifndef前面
line 245~247:
[assembly: AssemblyDelaySign(false)];
[assembly: AssemblyKeyFile("")];
assembly: AssemblyKeyName("")];