📄 00000001.htm
字号:
子目录下,并命名为 `as', `ld' 或相关档名。这样会使得在做下一阶段 <BR> 时第一阶段编译器会在这□找适合的工具。 <BR> <BR> 或者是,你可以在做後续的编译工作时把 `PATH' 环境变数值设成 GNU <BR> 工具在标准系统工具之前。 <BR> <BR> 12. 用底下这个命令叫这个编译器自己再重新编译一次: <BR> <BR> make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2" <BR> <BR> 这叫做建造第二阶段编译器。 <BR> <BR> 上面这个命令会造出所有支援语言的编译器。如果你不要全部都做,你可以 <BR> 用 `LANGUAGES="LIST"' 注明你要做的语言。 LIST 可以包含 `c', `c++', <BR> `objective-c' 和 `proto' 之一或多个,以空白分开。`proto' 是指 <BR> `protoize' 和 `unprotoize' 这两个程式,它们不是一个独立的语言, <BR> 但是你是用 `LANGUAGES' 决定要不要安装它们。 <BR> <BR> 如果你还要继续做第三阶段编译器,那你只要在第二阶段做出 C 语言就好了。 <BR> <BR> 当你做完第二阶段编译器以後,如果磁碟空间快没了,你可以砍掉 `stage1' <BR> 这个子目录。 <BR> <BR> 在没有浮点运算硬体的 68000 或 68020 系统上,除非你已经选了一个预设 <BR> 没有浮点运算器的 `tm.h' 档,不然就用底下这个: <BR> <BR> make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2 -msoft-float" <BR> <BR> 13. 如果你想以叫这个编译器再编译它自己一次来测试它的话,把其他需要的 <BR> GNU 工具 (像是 GAS 或 GNU linker) 放在 `stage2' 子目录□,就像在 <BR> 你之前在 `stage1' 子目录□做的一样,然後: <BR> <BR> make stage2 <BR> make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2" <BR> <BR> 这叫做建造第三阶段编译器。 除了 `-B' 选项,编译选项都跟你在做第二 <BR> 阶段编译器时一样。但是 `LANGUAGES' 这个选项不一定要一样。上面这个 <BR> 命令会做出所有支援的编译器。如果你不要全部都做,你可以用如前所述的 <BR> `LANGUAGES="LIST"' 选项指定你要的语言。 <BR> <BR> 如果你不需要安装任何附加的 GNU 工具,你可能要用底下这个命令 <BR> <BR> make bootstrap LANGUAGES=LANGUAGE-LIST BOOT_CFLAGS=OPTION-LIST <BR> <BR> 而不是做 `stage1', `stage2',并执行它们做出来的东西。 <BR> <BR> 14. 然後是比较第二阶段目的档跟最後的目的档 -- 除了时间戳记 (time stamp) <BR> 之外,它们应该要一样才对。 <BR> <BR> 在某些系统上,有意义的比较目的档是不可能的;它们总是显示 "不同"。 <BR> 目前在 Solaris 和一些使用 ELF 目的档格式的系统上都会发生。在某些版本 <BR> 的 SGI 机器上的 Irix 和 Alpha 系统上的 DEC Unix (OSF/1),你不可能不指 <BR> 定 `-save-temps' 而比较这些档案。如果你在比较上出了错,去看看上述个别 <BR> 系统的说明。你在其他系统上也可能发生类似问题。 <BR> <BR> 用这个命令来比较档案: <BR> <BR> make compare <BR> <BR> 它会提到所有第二阶段和第三阶段的目的档的不同。有任何不同的话,不管是 <BR> 多麽无害,都显示 GNU CC 在第二阶段把编译器做错了,所以有可能有严重 <BR> 的错误。你应该检查并提出报告。(*附注:虫) <BR> <BR> 如果你的系统不会在目的档上放时间戳记,有一个比较快的方法来比较它们 <BR> (用 Bourne shell): <BR> <BR> for file in *.o; do <BR> cmp $file stage2/$file <BR> done <BR> <BR> 如果你是在 MIPS 的机器上用了 `-mno-mips-tfile' 选项,你将没办法去 <BR> 比较这些档案。 <BR> <BR> 15. 打 `make install' 安装编译器驱动程式,这□面包括了编译器的各个 <BR> 阶段 (pass) 和执行时期支援。在 `CC', `CFLAG', `LANGUAGES' □用 <BR> 跟你在做编译时用一样的值。这样做有个必需的理由是因为某些版本的 <BR> make □面有虫,会莫名其妙地重新编译档案。假如你指定了一样的变数 <BR> 值,那些档案会适当地被重编译。 <BR> <BR> 举例来说,假如你已经建立好第二阶段编译器,你可以用底下的命令: <BR> <BR> make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="LIST" <BR> <BR> 这样做会把 `cc1',`cpp' 跟 `libgcc.a' 拷贝到 <BR> `/usr/local/lib/gcc-lib/TARGET/VERSION' 这个目录□,这个目录是编译器 <BR> 驱动程式用来找这些档案的地方。TARGET 是你在执行 `configure' 时所指定的 <BR> 目标机器型态,而 VERSION 是 GNU CC 的版本号码。这种命名方法是为了要 <BR> 使得不同版本及/或交互编译器可以同时存在。 <BR> <BR> 这样做也会把驱动程式 `xgcc' 放在 `/usr/local/bin/gcc' □面,使得它 <BR> 在典型的执行搜寻路径□出现。 <BR> <BR> 在某些系统上,这个命令会使得某些档案被重新编译。这通常是 `make' 的 <BR> 错。你可以忽略掉这个问题,或是使用 GNU Make。 <BR> <BR> *警告* Sun 的函式库中的 `alloca' 是有错的。要避免掉这个错误,确定 <BR> 你安装了用 GNU CC 所编译出来的 GNU CC 可执行档。(就是说,第二阶段 <BR> 或第三阶段的可执行档,而不是第一阶段的) 它们会把 `alloca' 当成是 <BR> 内建函数,而不会用到函数库中的那一个。 <BR> <BR> (通常最好是使用第二阶段或第三阶段所产生的 GNU CC 可执行档,因为一 <BR> 般来说它们在执行上会比其他的编译器快) <BR> <BR> 16. 如果你要用 C++,你大概也要安装 libg++ 这套东西。它应该在你取得 GNU C <BR> 的同一个地方。由於 GNU C 没有另外的 C 执行时期函式库,所以它也不包含 <BR> C++ 执行程式库。所有的 I/O 函数、特殊类别函式库等等都包含在 libg++ <BR> □面。 <BR> <BR>-- <BR>-- <BR>================================================================ <BR>ID: dfbb NICKNAME:赵无忌 REALNAME:方汉 <BR>---------------------------------------------------------------- <BR>爱好:GAME,Linux, PC Email: <A HREF="mailto:fangh@csun01.ihep.ac.cn">fangh@csun01.ihep.ac.cn</A> <BR> 武侠,古文 Clinux Homepage:<A HREF="http://csun01.ihep.ac.cn/linux/">http://csun01.ihep.ac.cn/linux/</A> <BR>================================================================ <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: envst-2.ncic.ac] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -