C++庫討論

           

          開始之前,確認(rèn):
          1.安裝完成Visual Studio 2005,確認(rèn)安裝的時候選中了Unicode MFC version以及CRT source code(默認(rèn)是選中的,如果你沒有改動的話那么應(yīng)該是裝上了的);
          2.找到我們要動手術(shù)的目錄,在$(Program Files)\Microsoft Visual Studio 8\VC 下,找出ATLMFC\SRC和CRT\SRC兩個文件夾;
          3.(可選)安裝Platform SDK,復(fù)制最新版本的unicows.lib放到VC\PlatformSDK\LIB中。VC8自帶有unicows.lib,所以這一步可以不做。
          一:編譯MSLU的CRT庫8.0
          首先請備份一下VC\Lib、VC\CRT\SRC、VC\ATLMFC\SRC、VC\ATLMFC\lib這四個文件夾(包括子文件夾),假如不小心改錯的話可以直接從備份的文件夾里復(fù)制文件出來。
          CRT庫需要編譯的是這6個DLL:MSVCR80.DLL、MSVCP80.DLL、MSVCM80.DLL、MSVCR80D.DLL、MSVCP80D.DLL、MSVCM80D.DLL。為方便操作,我們把將要輸出的MSLU的CRT庫文件改為別的名字以免和原來的混淆,分別改成:MSLUR80.DLL、MSLUR80D.DLL、MSLUP80.DLL、MSLUP80D.DLL、MSLUM80.DLL、MSLUM80D.DLL(如果你改成別的名字的話,后面的操作請做相應(yīng)的改正)。
          (1)先把SRC目錄下的相應(yīng)文件改名:
          copy _SAMPLE_.RC MSLUR80.RC
          copy SAMPLE_P.RC MSLUP80.RC
          copy SAMPLE_M.RC MSLUM80.RC
          copy SAMPLE_P.DEF MSLUP80.DEF
          copy SAMPLD_P.DEF MSLUP80D.DEF
          copy SAMPLE_M.DEF MSLUM80.DEF
          copy SAMPLD_M.DEF MSLUM80D.DEF
          copy SAMPLE_U.DEF MSLUU80.DEF
          copy SAMPLD_U.DEF MSLUU80D.DEF
          copy Intel\_SAMPLE_.DEF Intel\MSLUR80.DEF
          copy Intel\_SAMPLD_.DEF Intel\MSLUR80D.DEF
          (2)打開MSLUP80.DEF,修改LIBRARY SAMPLE_P為LIBRARY MSLUP80;
          打開MSLUP80D.DEF,修改LIBRARY SAMPLD_P為LIBRARY MSLUP80D;
          打開MSLUM80.DEF,修改LIBRARY SAMPLE_M為LIBRARY MSLUM80;
          打開MSLUM80D.DEF,修改LIBRARY SAMPLD_M為LIBRARY MSLUM80D;
          打開MSLUU80.DEF,修改LIBRARY SAMPLE_M為LIBRARY MSLUM80;(注意此處不是MSLUU80而是MSLUM80)
          打開MSLUU80D.DEF,修改LIBRARY SAMPLD_M為LIBRARY MSLUM80D;(注意此處不是MSLUU80D而是MSLUM80D)
          打開\Intel\MSLUR80.DEF,修改LIBRARY _SAMPLE_為LIBRARY MSLUR80;
          打開\Intel\MSLUR80D.DEF,修改LIBRARY _SAMPLD_為LIBRARY MSLUR80D;
          (3)打開SRC\makefile文件,修改開頭部分為:
          RETAIL_DLL_NAME=MSLUR80
          RETAIL_DLL_NAME=MSLUR80
          RETAIL_LIB_NAME=MSLUR80
          RETAIL_DLLCPP_NAME=MSLUP80
          RETAIL_LIBCPP_NAME=MSLUP80
          RETAIL_DLLMIXED_NAME=MSLUM80
          RETAIL_LIBMIXED_NAME=MSLUM80
          RETAIL_LIBPURE_NAME=MSLUU80
          RETAIL_PT_LIBMIXED_NAME=MLSUPTM
          RETAIL_PT_LIBPURE_NAME=MLSUPTU
          DEBUG_DLL_NAME=MSLUR80D
          DEBUG_LIB_NAME=MSLUR80D
          DEBUG_DLLCPP_NAME=MSLUP80D
          DEBUG_LIBCPP_NAME=MSLUP80D
          DEBUG_DLLMIXED_NAME=MSLUM80D
          DEBUG_LIBMIXED_NAME=MSLUM80D
          DEBUG_LIBPURE_NAME=MSLUU80D
          DEBUG_PT_LIBMIXED_NAME=MLSUPTMD
          DEBUG_PT_LIBPURE_NAME=MLSUPTUD
          RC_NAME=MSLUR80
          RCCPP_NAME=MSLUP80
          RCMIXED_NAME=MSLUM80
          54行處修改VCTOOLS,注意自己的VS2005安裝目錄,假如安裝到E:\SoftWare\Microsoft Visual Studio 8\下,則此處改為:
          VCTOOLS=E:\SoftWare\Microsoft Visual Studio 8\VC
          1779, 1841, 1905, 1940, 2037, 2105, 2139, 2230行的kernel32.lib,改為:unicows.lib kernel32.lib(一共8個不要改多了);
          (4)打開Visual Studio 2005 command prompt(從開始菜單或者是vc8的開發(fā)環(huán)境的菜單都可以啟動),進入到SRC目錄,輸入命令設(shè)置vctools,假如VS2005安裝在E:\SoftWare\Microsoft Visual Studio 8\下,則輸入:
          Set vctools=E:\SoftWare\Microsoft Visual Studio 8\VC
          完成后輸入bldnt啟動SRC目錄下的bldnt.bat批處理文件編譯CRT庫。
          譯者:我編譯的時候出來好多warning,不管他最后還是編譯完成了。
          (5)編譯完成之后lib文件都放在SRC\BUILD\INTEL\目錄下,把文件名字改回來以便以前的程序可以鏈接,而且下面編譯MFC庫也需要。DLL文件不用改,新的lib文件知道該鏈接到誰那里。改名:
          copy MLSUPTM.LIB PTRUSTM.LIB
          copy MLSUPTMD.LIB PTRUSTMD.LIB
          copy MLSUPTU.LIB PTRUSTU.LIB
          copy MLSUPTUD.LIB PTRUSTUD.LIB
          copy MSLUR80.LIB MSVCRT.LIB
          copy MSLUR80D.LIB MSVCRTD.LIB
          copy MSLUP80.LIB MSVCPRT.LIB
          copy MSLUP80D.LIB MSVCPRTD.LIB
          copy MSLUM80.LIB MSVCMRT.LIB
          copy MSLUM80D.LIB MSVCMRTD.LIB
          copy MSLUU80.LIB MSVCURT.LIB
          copy MSLUU80D.LIB MSVCURTD.LIB
          (6)把改名后的lib文件復(fù)制到VC\LIB目錄下覆蓋原來的文件。
          (7)把步驟(4)、(5)、(6)再執(zhí)行一次來重建MSLUP80(D).DLL和靜態(tài)庫,以便他們能鏈接到我們自己的MSVCRT(D).LIB(指向我們的MSLUR80(D).DLL)。
          關(guān)掉VS2005 command prompt,因為編譯CRT庫的時候定義了許多環(huán)境變量,這些會使后面MFC庫的編譯出現(xiàn)錯誤。
          6個新的DLL文件都在\VC\crt\src\build\intel下,把這6個文件復(fù)制到系統(tǒng)目錄下。
          二:編譯MSLU的MFC庫8.0 Unicode版本
          MFC庫需要編譯的是這4個DLL:
          MFC80U.DLL (Unicode Release)
          MFC80UD.DLL (Unicode Debug)
          MFCM80U.DLL (Mixed mode/Managed Unicode Release)
          MFCM80UD.DLL (Mixed mode/Managed Unicode Debug)。
          為方便操作,我們把將要輸出的MSLU的CRT庫文件改為別的名字以免和原來的混淆,分別改成:
          MFC80LU.DLL
          MFC80LUD.DLL
          MFCM80LU.DLL
          MFCM80LUD.DLL
          (如果你改成別的名字的話,后面的操作請做相應(yīng)的改正)。
          (1)打開VC\ATLMFC\SRC\MFC\MFCDLL.MAK,在274、307行的link @<<,后面插入一行變成:
           link @<<
          /nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib
          180行的
          LIBS=$(CRTDLL) kernel32.lib gdi32.lib msimg32.lib user32.lib uuid.lib daouuid.lib htmlhelp.lib shlwapi.lib $(PROFLIB)
          改為:
          LIBS=$(CRTDLL) unicows.lib kernel32.lib advapi32.lib comdlg32.lib shell32.lib oledlg.lib winspool.lib oleacc.lib gdi32.lib msimg32.lib user32.lib uuid.lib daouuid.lib htmlhelp.lib shlwapi.lib $(PROFLIB)
          (此處不同于原文。原文為:
          LIBS=$(CRTDLL) unicows.lib kernel32.lib gdi32.lib msimg32.lib user32.lib uuid.lib daouuid.lib htmlhelp.lib shlwapi.lib $(PROFLIB)
          譯者依照原文修改,編譯的時候出現(xiàn)了錯誤,增加數(shù)個lib文件后編譯通過)
          (2)打開VC\ATLMFC\SRC\MFCM\MFCMDLL.MAK,在253、272行的link @<<,后面插入一行變成:
           link @<<
          /nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib
          215行的
          LIBS=$(CRTDLL) $(CRTMDLL) mscoree.lib kernel32.lib gdi32.lib msimg32.lib user32.lib \
          改為:
          LIBS=$(CRTDLL) $(CRTMDLL) mscoree.lib unicows.lib kernel32.lib advapi32.lib comdlg32.lib shell32.lib oledlg.lib winspool.lib mpr.lib oleacc.lib gdi32.lib msimg32.lib user32.lib \
          (此處原文為:
          LIBS=$(CRTDLL) $(CRTMDLL) mscoree.lib unicows.lib kernel32.lib gdi32.lib msimg32.lib user32.lib \
          其余說明同上)
          (3)打開\VC\atlmfc\src\mfcm\INTEL\mfcm80u.def 文件,把第10行的LIBRARY mfcm80u 改為:
          LIBRARY mfcm80Lu
          打開\VC\atlmfc\src\mfcm\INTEL\mfcm80ud.def文件,把第10行的LIBRARY mfcm80ud改為:
          LIBRARY mfcm80Lud
          (4)打開\VC\atlmfc\src\mfcm\wfrmcmd.cpp文件,251行的#error Following information required to build private version用//注釋掉或者直接把該行刪掉;253行的[assembly: AssemblyTitle("")];改為:
          [assembly: AssemblyTitle("mfcm80L")];
          (5)打開\VC\atlmfc\src\mfcm\interfaces\AssemblyInfo.cpp文件,78行的#error Following information required to build private version用//注釋掉或者直接把該行刪掉;85行的[assembly: AssemblyTitle("")];改為:
          [assembly: AssemblyTitle("mfcm80Lifaces")];
          (6)在\VC\atlmfc\src\下建立一個批處理文件:buildmfc.bat,內(nèi)容為:
          nmake -f atlmfc.mak MFC libname=MFC80L
          (7)打開Visual Studio 2005 command prompt,進入目錄\VC\atlmfc\src\,輸入buildmfc執(zhí)行buildmfc.bat編譯MFC庫。
          編譯完成之后,在\VC\atlmfc\src\mfc\intel下有MFC80LU.DLL、MFC80LUD.DLL,在\VC\atlmfc\src\mfcm\INTEL下有MFCM80LU.DLL、MFCM80LUD.DLL,把這4個DLL文件復(fù)制到系統(tǒng)目錄下;在\VC\atlmfc\lib\INTEL下有MFC80LU.LIB、MFC80LUD.LIB、MFCM80LU.lib、MFCM80LUD.lib,把文件名改為:
          MFC80U.LIB、MFC80UD.LIB、MFCM80U.lib、MFCM80UD.lib
          把這四個lib文件復(fù)制到\VC\atlmfc\lib下覆蓋原來的文件就完成了。

          posted on 2007-05-15 22:47 daiyie 閱讀(1349) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 秦皇岛市| 凤山市| 凤山县| 汉阴县| 神农架林区| 北京市| 宁陵县| 平远县| 墨脱县| 乐亭县| 廊坊市| 普宁市| 巴彦淖尔市| 惠安县| 济源市| 登封市| 都昌县| 宝丰县| 南康市| 赤峰市| 临夏县| 曲阳县| 民丰县| 仙桃市| 鄂伦春自治旗| 文水县| 大厂| 伊川县| 兴海县| 安徽省| 弥渡县| 柳河县| 从江县| 阳曲县| 凤台县| 巩义市| 通许县| 邻水| 永兴县| 彭山县| 汨罗市|