静态链接和动态链接
静态链接:生成可执行代码,链接静态库(与代码位置有关的链接方式),需要将代码拷贝到我们的源代码中才能运行。
动态链接:生成可执行代码,链接动态库(生成与代码位置无关的库生成方式),只需要将函数的符号写入即可,只会拷贝动态库的符号。
动态库的生成
命名:动态库使用libxxx.so文件名字,其中的xxx就是动态库的名字
-
将我们的.c文件生成.o文件
gcc -fPIC -c c文件 -o o文件,其中-fPIC关键字是产生与位置无关的代码
-
指定生成动态库而不是可执行文件
gcc --shared o文件 -o 动态库名字(此时的动态库就是加上前缀后缀的名字)
静态库的生成
命名:lib是前缀,.a是后缀 中间是库名称
-
将所有的.c文件变成.o文件
gcc -c c文件 -o o文件
-
生成静态库
ar -cr 库文件 o文件(-c只需要库名称,不需要前缀,-r模块替换)
静态库的使用
在编译的时候加上参数-l和-L
-l:链接制定的库,此时我们只需要库的名称,不需要前后缀。
-L:指定当前的路径,也就是库的路径
动态库的使用
gcc c文件 -o 文件名 -l库名称
-
将库文件放入到制定的目录下面,在动态链接库的时候有默认的搜索路径/lib,/lib64等等目录下面,可以将库文件放到 这些目录下就可以动态链接到我们的库文件
-
设置我们的LIBRARY_PATH和LD_LIBRARY_PATH两个环境变量,此时我们就需要使用到我们的export命令
-
将LIBARARY_PATH设置成我们当前的目录下边,这就是指定库文件的搜索路径 将LD_LIBRARY_PATH设置成我们的当前目录下边,这就是指定我们库文件的加载路径,当这样我们就可以直接使用我们的库文件,同样也实现了我们加减法的运算
-
在gcc生成可执行程序时直接指定库的搜索路径(只是库的搜索路径)
-L:指定当前路径 -I:指定头文件的路径
当我们移除上面的环境变量之后我们就不能链接到我们的库文件了
但是我们可以指定当前的文件路径和头文件路径,这仍然是可以成功的。
注意事项
想要使用静态库不能使用static选项,因为-static是生成静态连接可执行程序,所有库都使用静态库(有时候我们只是需要使用一个静态库,而不是所有的都是用静态库),只要保证在-L指定的路径中只用相同名字的静态库就会链接静态库
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)