链接分为两种,分别为静态链接和动态链接
库文件分为静态库文件和动态库文件
一.静态库的建立和使用
使用静态库文件链接生成可执行文件的时候,采用静态链接的方式。
1.将要加入静态库的模块编译成目标文件
gcc -c a.c b.c
2.将目标文件打包到静态库文件中
ar -r libname.a a.o b.o
3.使用静态库文件链接生成可执行文件
gcc -c main.c
gcc main.o -L. -lname
(-L路径 链接器寻找库文件的路径) (-l库名 指定要找的库名)
二.动态库的建立和使用
1.将加入动态库的模块编译成目标文件(与位置无关的目标文件)
gcc -c -fPIC a.c b.c
-fPIC选项作用于编译阶段,告诉编译器产生与位置无关代码
(Position-Independent Code),则产生的代码中,没有绝对
地址,全部使用相对地址,故而代码可以被加载器加载到内
存的任意位置,都可以正确的执行。这正是共享库所要求的,
共享库被加载时,在内存的位置不是固定的。
2.将第一步生成的目标文件打包到动态库文件中
gcc -shared -o libname.so a.o b.o
3.使用动态库链接生成可执行文件
首先我们要告诉链接器去哪里找动态库文件,有两种方法
法一:使用LD_LIBRARY_PATH环境变量告诉动态链接器
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
法二:链接器默认的搜索路径是/lib或者/usr/lib
我们可以用ldd a.out 查看该可执行文件文件加载情况
gcc main.c -L. -lname
当执行函数动态链接