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