前幾天心血來(lái)潮
,
想自己編譯一個(gè)
firefox
試試看
,
折騰了好幾天
,
終于完成了
.
寫(xiě)篇文章總結(jié)一下
.
我編譯的環(huán)境
:
1.??????
VC6 + sp5
2.??????
firefox
編譯需要的輔助工具
wintools.zip
3.??????
cygwin
環(huán)境
?
準(zhǔn)備工作
:
1.???????下載
firefox
程序代碼,在
mozilla
的站點(diǎn)上可以下載到,我編譯的是
firefox 1.5.0.6
版本
2.??????
下載編譯需要的
wintools.zip
工具
,1.73MB
大小
,
其中帶有
glib
和
libidl
庫(kù)
,
在下載解壓縮后
,
建立一個(gè)環(huán)境變量
MOZ_TOOLS
到某個(gè)目錄
,
然后進(jìn)入解壓縮后的
windows
目錄
,
運(yùn)行
install.bat
文件
,
安裝相關(guān)需要的文件
.
3.??????
安裝
cygwin
環(huán)境
,
一個(gè)
window
下的類
unix
平臺(tái)
,
這里需要注意的是
,
最新的
cygwin
中
,
安裝的
make
版本是
3.81
的
,
而編譯
firefox
需要的是
3.80
版本的
make,
解決的方法是到
cygwin
的某個(gè)
ftp
鏡像站點(diǎn)上去下一個(gè)
3.80
版本的文件
,
安裝到
cygwin
安裝目錄下的
/bin
目錄下就可以了
.
其中編譯
firefox
需要的基本工具
ash -- UNIX-like command line interpreter shell (Base category)
coreutils -- GNU core utilities (includes fileutils, install, sh-utils, and textutils) (Base category)
cvs -- concurrent versions system (Devel category)
diffutils -- file comparison utility (Base category)
findutils (Base category)
gawk -- pattern matching language (Base and Interpretors categories)
grep -- text search tool (Base category)
libiconv -- character set conversion (Devel category)
make 3.80 (not 3.81!) -- dependency analyzer for software builds (Devel category)
patchutils -- a small collection of programs that operate on patch files (Devel category)
perl -- a scripting language used to control parts of the build (Interpreters category)
sed -- a search and replace language (Base category)
unzip -- zip file extraction (Archive category)
zip -- zip file creation (Archive category)
可以在
cygwin
命令窗口中輸入相關(guān)命令檢測(cè)是否安裝了相關(guān)的程序
.,
其實(shí)如果下載了
firefxo
源代碼的話
,
象
cvs
中的都不是必須的
.
4.??????
安裝
vc6 + sp5,
編譯
firefox 1.5.0.6,
推薦的是
vc6
的
cpp
編譯器
.
在
vs6
安裝后
,
會(huì)自動(dòng)設(shè)置相關(guān)的
path,include
和
lib
環(huán)境變量
.
有一個(gè)需要注意的是
, vc6
的
link.exe
和
cygwin
中的
link.exe
是相同的名字
,
為了避免在編譯的時(shí)候
,
調(diào)用錯(cuò)誤的
link
執(zhí)行文件
,
可以把
cygwin/bin
中的
link.exe
改名為
glink.exe
避免沖突
. Vs
的
sp5
補(bǔ)丁也需要打一下
,
否則
,
生成的
xpldl.exe(firefox
用來(lái)編譯
idl
文件的工具
)
在編譯
idl
過(guò)程中會(huì)報(bào)錯(cuò)
.
5.??????
配置文件
在環(huán)境和編譯工具準(zhǔn)備好后
,
解壓縮
firefox
的代碼
,
然后在
firefox
代碼目錄的
mozilla
目錄下
,
建立一個(gè)名為
.mozconfig
的文件
,
并在其中編輯文本
. $topsrcdir/browser/config/mozconfig
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --enable-static
ac_add_options --disable-shared
ac_add_options --disable-test
開(kāi)工
上面所有工作完成之后
,
啟動(dòng)
cygwin
命令窗口
,
進(jìn)入
firefox
代碼的
mozilla
目錄
輸入
make –f client.mk build
命令開(kāi)始編譯
,
一切順利的話
,
幾十分鐘后
,
就會(huì)有一個(gè)
firefox
的執(zhí)行文件生成到
mozilla/dist/bin
目錄下
.
需要注意的是
,
在生成一個(gè)
test
的模塊的時(shí)候
,
會(huì)報(bào)一個(gè)
jsint
類型未定義
,
這個(gè)無(wú)關(guān)緊要
,
因?yàn)?/span>
firefox
已經(jīng)生成了
,
這是一個(gè)測(cè)試模塊
,
我的解決方法是
,?打開(kāi)那個(gè)出錯(cuò)的cpp文件,加入
#ifdef?? _MSCVER
typedef? int? int32;
#endif
然后再編譯就可以了
,
所謂自動(dòng)動(dòng)手
,
豐衣足食
,
有的時(shí)候
,
實(shí)在不行的話
,
需要把
firefox
的代碼自己動(dòng)手改一下
.
?
?