《Linux权威指南》阅读笔记(3)

第十三章 程序设计语言

Linux共享函数库使用一种叫跳跃表格(jump table)的数据结构

gcc -o 执行链接,指定文件名,-c不执行链接,-O优化,-g调试信息放入目标文件,

建立和使用静态函数库的方法:

先gcc -c将含目标函数源码(多个文件也可以)编译为.o文件,然后用ar程序 ar -r 建立.a静态库,

然后用ranlib命令产生索引,然后为该函数库建立头文件

gcc  -I../include -L../lib  -o  wibble  wibble.c  -lstuff    使用建立的函数库

其中-I参数要求gcc在搜寻头文件时,(除默认目录外)也到指定目录去找,-L要求搜寻函数库也要到指定目录去找。

函数库目录/usr/lib,其中.a结尾是静态函数库, .so结尾是共享函数库

建立和使用共享函数库的方法:

共享函数库程序代码与位置无关,gcc使用 -fPIC参数产生与位置无关的代码

gcc  -c  pfPIC  square.c  factorial.c 

gcc  -shared  -o  libstuff.so   square.o  factorial.o

共享函数库不需要制作索引,现在可以使用所建立的共享函数库了:

gcc  -I../include -L../lib  -o  wibble  wibble.c  -lstuff   -lm   其中-lm指定连接libm这个函数库(函数库默认lib开头,-lstuff 指定libstuff)

使用ldd可以查看执行文件使用了哪些共享函数库

Makefiles

通常以makefile或Makefile作为文件名,格式如下

edimh:main.o  edit.o

    gcc  -o  edimh  mian.o  edit.o

make可以定义宏,上面的范例可以修改为:

OBJECTS=main.o  edit.o

edimh: $(OBJECTS)

    gcc  -o  edimh  mian.o  edit.o

宏可以修改,比如用:=  在宏末尾添加drivers/scsi/scsi.a

DRIVERS :=$(DRIVERS)  drivers/scsi/scsi.a

宏还可以在make的命令行进行定义和赋值

文件名后缀、模式匹配规则

%.o: %.c

    gcc  -c -o  $@  $(CFLAGS)  $<

输出文件%.o,输入文件 %.c,$<代表输入文件,$@代表输出文件,$*代表不含结尾字符串的输入文件名,如输入edit.c,则$*为edit。

行首加@,在执行该行命令不显示,加 - ,发生错误也不停。

可以用include引入其他makefile

使用Perl

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。