chap6-系统编程题稿.ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
缺省情况下,链接程序将优先查找同一目录下的动态库版本libx.so,不成功时才选择静态库libx.a。 缺省情况下,链接程序将在系统的标准位置(/usr/ccs/lib和/usr/lib目录下)按上述顺序搜索所需的库。由编译系统提供的标准库一般被放在/usr/ccs/lib目录下。 在这些约定的基础上,我们可以更明确地讲,缺省的cc命令行将引导链接程序搜索/usr/ccs/lib/libc.so,而不是它所对应的静态库。 在程序比较复杂的情况下,一个程序可能就不是仅仅调用了标准C库中的函数了。例如,对于用到了数学运算sin(),cos()这类函数的程序,它就可能需要同数学函数库链接。 链接程序将在标准位置查找libm.a库函数。当然这需要在cc命令行中加上一个-l选项,如下所示: $ cc file.c file2.c -lm -l选项在命令行中的位置很重要。例如: $ cc -dn file1.c -lm file2.c 这样链接程序对libm.a的搜索只是为了解决file1.c中对数学函数的调用。 静态库和动态库的建立 静态库收集了一系列的目标文件。这些目标文件就是由CC对函数的源代码编译生成的。因此,静态库的生成方法实际上可分成两步: 1.将各函数代码所在地源文件编译成目标文件。例如,对于前面的myfunc.c,可以用如下命令将其编译成目标文件: $ cc -c myfunc.c 如何生成静态库 当然在有多个源文件时,只需在cc命令行中将其分别列上就可以了。 经此一步我们将能够得到各源文件的目标文件。对上例将得到myfunc.o。 2.将各目标文件收集起来放到一个静态库文件中。这主要借助于ar命令完成,如: $ ar r $HOME/lib/libtest.a myfunc.o ar:creating /home/yxz/libtest.a 这里-o $HOME/lib/libtest.a是生成的静态库的全路径名。 注意对静态库的命名要遵循libx.a的原则,便于以后能够在cc命令行中用-l选项指定之。后面的myfunc.o则是待收集到档案库中的目标文件名。有多个目标文件时只需分别列上即可。 这生成了libtest.a档案库之后,再编译myprog.c时,便可使用下面的办法: $ cc -L $HOME/lib -o myprog myprog.c –ltest 需在命令行中加上-K PIC和-G这两个选项,如下可以建立libtest的动态版本: $ cc -K PIC -G -o $ HOME/lib/libtest.so myfunc.c 这里-o $ HOME/lib/libtest.so指定待生成的动态链接库的全路径名。 同静态库一样,动态库的命令应遵循libx.so约定。-G选项指示cc按动态链接库的格式将其各文件的目标代码组织起来。 建立动态链接库 生成了动态库之后,就可以在cc命令行中使用它了。如: $ cc -L $ HOME/lib -o myprog myprog.c -l test 这时虽然在$HOME/lib目录下也具有test库的静态版本libtest.a,但链接程序将优先搜索libtest.so。 动态链接库的使用 4. makefile文件 解决多个程序的正确编译问题 创建makefile原则,如可执行程序f1的构成关系如下: 这里程序f1的makefile文件应包含以下内容: f1: f1.o f2.o f3.o cc –o f1 f1.o f2.o f3.o f1.o: f1.c def.h cc -c f1.c f2.o: f2.c cc -c f2.c f3.o: f3.c cc –c f3.c 根据相互关系可写出对程序f1进行编译的makefile 文件. 如P99举例。 6.4 常用函数库glib的使用 略 * cc命令常用选项--仅进行编译预处理 在命令行中加上-P选项可以使cc仅完成对.c文件的预处理工作,而后面的编译,汇编,优化,链接则都不作,例如: $ cc -P hello.c 在cc命令行中加上-S 选项,可以使cc只调用预处理程序和编译程序以生成与源程序相应的汇编代码。 与每一个C源文件相应的汇编程序被放到相应的.s文件中。 例如: $ cc -S main.c output.c link.c cc命令常用选项--仅生成汇编代码 在cc命令行中加上-C选项,只生成源文件的目标代码而不对这些代码进行链接,此时编译系将只生成与各源文件相对应的.o文件(目标文件)。 如: $ cc -c main.c output.c link.c cc命令常用选项--仅生成目标文件 C源程序中用# incl

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档