您的位置:首页 > 运维架构 > Linux

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