📄 gcc-howto.txt
字号:
The Linux GCC HOWTO中译版V0.2 作者: Daniel Barlow <dan@detached.demon.co.uk>译者: 陈建勋(Frank J.S. Chen)<frank63@ms5.hinet.net> v1.17, 28 February 1996 _________________________________________________________________ 本文阐述安装GNU C编译器和程式馆的方法,同时概观地说明程式的编译、连结、 执行、除错的过程以及可能面临的诸多问题。写作的参考资料泰半来自於Mitch D'Souza先生所收集的GCC-FAQ;而另一个来源是ELF-HOWTO。此份HOWTO可以说已 代替了GCC-FAQ,而且即将要永久替代ELF-HOWTO了。此乃GCC-HOWTO第一份公开发 行的版本(不须理会版本序号;那是RCS的杰作),有任何指正与建议的,本人都 很欢迎。 _________________________________________________________________ 1. 行远必自迩! * 1.1 译者的话 * 1.2 动与静 * 1.3 作者的私语 * 1.4 印刷与排版 2. 东东在哪儿? * 2.1 GCC-HOWTO在哪儿? * 2.2 GCC相关的资料又在哪儿? * 2.3 GCC * 2.4 C程式馆与标头档 * 2.5 有关联的工具 (as, ld, ar, strings etc) 3. GCC的安装与GCC的设定 * 3.1 GCC的版本 * 3.2 东东装好後都到哪儿去了? * 3.3 标头档ㄋㄟ?标头档ㄋㄟ? * 3.4 建立交叉编译器(Building cross compilers) 4. 移植程式与编译程式 * 4.1 gcc自行定义的符号 * 4.2 线上求助说明 * 4.3 移植能力 5. 除错与监管 * 5.1 预防重於治疗(lint) * 5.2 除错 * 5.3 监管 6. 连结 * 6.1 共享程式库 vs静态程式库 * 6.2 终极审判(‘sin() 在哪个程式库里?’) * 6.3 X档案? * 6.4 建立你自己的程式库 7. 动态载入 * 7.1 基本概念 * 7.2 错误讯息 * 7.3 控制动态载入器的运作 * 7.4 以动态载入撰写程式 8. 与发展人士联络 * 8.1 Bug报表 * 8.2 协助发展 9. 结语 * 9.1 名人榜 * 9.2 翻译 * 9.3 欢迎任何的回馈 * 9.4 合法的行迳规定 10. 索引 _________________________________________________________________ 1. 行远必自迩!1.1 译者的话 * 这份译文为Linux document projects(LDP)中文翻译计画系列之一。目前之 网址为 [1]http://www.linux.org.tw/CLDP/,欢迎各位网友踊跃投入此一计 画。 * 我并没有完全按照原文逐字翻译。为了力求译文通畅可读,我会稍稍的重组 一部份的文字,加油添醋,或是精简原文;这样做的话,可以弥补中英文间 语法结构的差异性,且语气可以贯通无碍。 * 一些关键字与专业词汇等,会附加上原文单字。 * 遇有转译困难,唯原文常见的字汇如bugs、shadow password、padding 、image之类的,则保留原文不变。若阁下对这些字汇有适当译辞的,请不吝 指教。 * 内文中若遇有"[译者注:**]"之标记,则为本人额外之注解。 * 对这篇译文有任何建议与疑问的,请email至frank63@ms5.hinet.net。 * WWW Home Page: [2]http://linux.ntcic.edu.tw/~jsfrank/。 * 此中译文件之翻译权已取得英籍之原作者Daniel Barlow 先生之同意;另, 陈建勋先生保有此份中译版文件所有的权利,你可以任意的拷贝,以各种媒 体散布这份中译文件,唯此节补充说明需原封不动附上,且不可任意更动译 文。 * v0.1版的译文相当粗糙,连文句的语法结构都嫌太过於松散,v0.2版针对中 文的用字习惯来修正,并将上一版译的不妥当的地方修正过来,例如either 这个字,英国人常把either当名词用,指两者中任意一个;这份HOWTO就充份 反应出这个用字习性,跟美语有基本上的差异。 * 文中有几句话没有译出来,一方面是看不懂,另方面是直译也译不出来,所 以只好保留原文了,要是阁下有新的领悟的,无论如何请告诉我。 * v0.1版翻译起始日期为:11/7/97;截止日期为:11/19/97。 * v0.2版修正起始日期:5/13/98;截止日期为:6/3/98。 1.2 动与静 目前Linux的发展正波涛汹涌的进行著。简单一点讲,Linux有两种执行档的格式 可用,取决於你的系统是怎麽整合起来的;你的Linux应该是其中一种吧!阅读这 份文件,可以帮助你□清执行档的类别。 要如何区别呢?执行公用程式‘file’(例如,file /bin/bash)就对了。 就ELF的程式而言,萤幕上显示出来的讯息会含有ELF的字眼;如果说是a.out的, 讯息内会箝有 Linux/i386的字样。 ELF与a.out格式的差异之处会在後续的章节中讨论(很广泛喔!)。ELF是比较新 的格式,一般而言,接受的程度较佳。 1.3 作者的私语 版权说明与合法的行迳规定,就摆在这份文件的尾端。除此之外,我还有一些不 得不提醒你的话要讲。就算你□著没事干,也不要在Usenet上丢一些呆瓜问的问 题;还有,不要老以为自己C语言的功力深厚,专门发表一些不是bugs的bugs出来 丢人现眼,这不就等於告诉别人你不学无术,在关老爷面前耍大刀了吗?所以说 自以为是的英雄主义是得不偿失的。 1.4 印刷与排版 如果你现在读的是Postscript、dvi或是html格式,那麽你所看到的字型变化就会 比只读纯文字格式的人多一些。特别是档案名称、命令、命令的输出与摘录出来 的原始码等,统统都是打字机的字型。这样做的话,对於某些需要强调的‘变数 ’还有那些没有固定结果的□例而言,就可以达到强调的效果了。 读这份文件的同时,你也会得到一套蛮有用的索引。假若是dvi、 postscript之 类的版本,索引的数字就是章节(section)的编号;如果是HTML的话,这些数字会 按顺序排列,你可以用滑鼠左键去连结相对的索引内容;如果你看的是纯文字版 本的话, 数字就只是数字,没别的含意;建议你赶快升级为妙哩! 我用的shell是Bourne shell(不是C shell),举的例子自然是Bourne shell的 语法。如果你用的是C shell的话,设定环境变数的语法会像下面这样: % setenv FOO bar 要是用Bourne shell的话,我会这样子写: $ FOO=bar; export FOO 如果提示符号显示的是井字符号#而不是钱字符号 $的话,很有可能这个命令是只 适用於root而已。当然啦,要是你试了这些□例,结果弄得你的系统发生灾变, 我可是一点责任也不会负的喔!祝好运!:-) 11/8/97译. 5/13/98修订 2. 东东在哪儿?2.1 GCC-HOWTO在哪儿? 这份文件是Linux HOWTO系列之一,换句话说,你可以在所有存放Linux HOWTO文 件的网站上面找到她的芳踪,例如 [3]http://sunsite.unc.edu/pub/linux/docs/HOWTO/。HTML的版本(可能会是较 新的版本)可以从 [4]http://ftp.linux.org.uk/~barlow/howto/gcc-howto.html上面抓下来。 2.2 GCC相关的资料又在哪儿? 标准的gcc说明文件是随附在发行的原始码(source distribution)内(往下看就 有了!),里头有textinfo与.info两种档案。要是你的网路连接速率够快,或是 有一片cdrom,不然,有高度的耐心也成,你可以自己把它untar,然後再把相对 应的位元一一拷贝到/usr/info的目录底下。假如你的条件与上述的不符,不妨到 [5]tsx-11站上去参观参观。不过,我想,没有必要老是惦记著最新的版本吧! libc的文件说明有两种来源。一种是GNU libc,以.info的格式储存,除了stdio 之外,其馀Linux libc的说明都相当的详尽精确。另一种可以在Linux的archive [6]manpages上找到系统呼叫(system call)(第2节)与libc函数(function) (第3节)的文件说明。 2.3 GCC 解答有二: (a)你可以在 [7]ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/的网站上找 到 正式的Linux GCC发行系统(distribution),而且是已经编译好的可执行档。 当我在写这份文件时,2.7.2(gcc-2.7.2.bin.tar.gz)是最新的版本。 (b)自由软体基金会(Free Software Foundation)所发布的GCC最新原始码可以 从网站 [8]GNU archives上取得。没有必要非得与上述的版本一致才行,不过这 个版本的确是目前最新的。Linux GCC的维护网友(maintainers)让你可以很轻松 的自行编译这个最新的版本。configure命令稿(script)会帮你自动设定好所有该 做的事情。建议你有空不妨到 [9]tsx-11看看,说不定会有修正的版本是你会想 要用的。 如果想要编写出一些有用的软体(不是我罗唆,还是有不少没啥用途的软体在网 路上四处流窜。),下面这一小节所谈的也是你需要的: 2.4 C程式馆与标头档 该选哪一套程式馆是取决於(i)你的系统是ELF的或是a.out的;(ii)你希望你的系 统变成哪一种?如果你是从libc 4升级到libc 5,那麽给你一个良心的建议,先 去看看ELF-HOWTO再说。你一定会问,在ELF文件的哪儿呢?嘿!嘿!不偏不倚, 就差不多跟这份文件相同的位置。网站 [10]tsx-11上面可以找到你想要的。 libc-5.2.18.bin.tar.gz --- ELF共享程式馆(ELF shared library images),静态程式馆 (static libraries)与标头档(针对C语言与数学程式馆)。 libc-5.2.18.tar.gz ---libc-5.2.18.bin.tar.gz的原始码。这个档案你也需要,因为.bin.套 件(package)含有必需的标头档。如果此时你正犹豫不决,不晓得是老身 亲自下海,动手编译C程式库比较好;还是直接用人家编译好的二进位 档(binaries)就可以了。有这种困扰的人,来,看我的嘴形:用人家编译 好的二进位档不就解决了嘛!只有在你想要NYS或是shadow password的情 况下,才需要自己的手来推动摇篮。 libc-4.7.5.bin.tar.gz --- 这个档案是a.out的共享程式库(shared library images)与静态程式 库,用途是为了与前述的libc 5套件共存共荣而设计的,不过除非你想要 继续使用a.out的程式或是继续发展a.out的程式,不然的话,是不需要它 的。 2.5 有关联的工具 (as, ld, ar, strings etc) 到目前为止,与之前所谈的都一样,从网站 [11]tsx-11上,就可以找到这些工具 程式。目前的版本是binutils-2.6.0.2.bin.tar.gz。 需要注意的是binutils只适用於ELF,而且目前libc的版本也都是属於ELF的;当 然啦,习惯a.out的人如果有个ELF的libc与a.out的libc联合起来一起使用,这对 他们来讲是再好不过的美事了。不可否认的,C程式馆的发展正以坚决的脚步迈 向ELF的格式,除非你真的有很好的理由,需要a.out的东东,不然啊,大家都会 鼓励你勇於突破,趁早加入锐不可挡的大潮流。 11/9/97译 3. GCC的安装与GCC的设定3.1 GCC的版本
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -