Linux.C编程一站式学习-笔记
2016-05-03 22:34
573 查看
19章链接详解
1变量声明与函数声明有一点不同,函数声明的extern关键字可以省略,而变量声明不写extern意思完全不同,表示为定义了一个局部变量。2static关键字声明具有Internal Linkage,这些函数变量作用域仅限本文件,则不想被外部文件所访问的变量和函数就可以声明为static。
3用角括号包含的头文件,gcc首先查找-I选项指定的目录,然后查找系统的头文件目录。引号包含的头文件,gcc首先查找包含这个头文件的当前文件所在的目录,然后查找-I选项指定的目录,然后查找系统的头文件目录
4extern关键字具有Previous Linkage,表示当前声明取决于编译单元中前面对这个标识符的声明,如果前面找不到这个标识符的声明,这个标识符具有Extern Linkage。
5静态库:库文件名都是以lib开头,静态库以.a作为后缀
$ ar rs [静态库名称] [目标文件名] gcc -c stack/stack.c stack/push.c stack/pop.c ar rs libstack.a stack.o push.o pop.o gcc main.c -L. -lstack -o main
ar用来打包,r表示将后面的目标文件列表添加到文件包中。s为静态库创建索引,这个索引被链接器使用。
gcc -c 生成目标文件 -L告诉编译器去哪儿找需要的库文件 -L.在当前目录查找
-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名
gcc -print-search-dirs 可以看到gcc库文件的搜索路径列表。如果不指定-L目录,则会出问题。
6链接静态库和共享库的区别:链接静态库,链接器会把静态库中的目标文件取出来和可执行文件真正的链接在一起。链接共享库时,链接器知识确认可执行文件引用的某些符号在共享库中有定义,并没有确定这些符号的地址,这些符号在可执行文件中任然是未定符号,在运行时做动态链接。使用静态库好处:只取出需要的目标文件做链接,不需要的文件可以不连接。
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍