常州网站建设百科,网站空间是虚拟机吗,重庆哪家网站,竞价排名推广静态库和动态库 静态库和动态库的打包 生成可执行程序时链接使用 运行可执行程序时加载使用 提前声明#xff0c;笔者示例的文件有mian.c/child.c/child.h。OK#xff0c;我们先了解一下#xff0c;库文件是什么#xff1f;它其实就是打包了一堆实现常用功能的代码文件.
⭐…静态库和动态库 静态库和动态库的打包 生成可执行程序时链接使用 运行可执行程序时加载使用 提前声明笔者示例的文件有mian.c/child.c/child.h。OK我们先了解一下库文件是什么它其实就是打包了一堆实现常用功能的代码文件.
⭐静态库和动态库的打包 打包时先应将各个.c文件编译汇编成为目标文件
动态库的生成 gcc -fPIC -c child.c -o child.o gcc --share child.o -o libchild.so 注动态库的命名方式libxxx.soxxx表示库的名称 静态库的生成 gcc -c child.c -o child.o ar -cr libchild.a child.o(后面的参数都是.o文件可以不止一个就是要打包的文件) 注静态库的命名方式libxxx.axxx表示库的名称 生成动态库的指令的参数的含义
–share生成一个共享库告诉gcc生成库不生成可执行程序不要去检测main函数 -fPIC产生与位置无关代码当库用于多个程序共享便于映射到每个程序中。 让库中的每个函数在各个程序中生成的时候相对于映射的起始位置的偏移量生成 生成静态库的指令的参数的含义
-c创建静态库 -r 当静态库要生成判断是否要将所有的.o文件重新生成静态库如果只是某一个.o修改了内容未变则只用将该模块替换不用重新生成静态库。可以没有该参数选项
⭐生成可执行程序时链接使用 gcc main.c -0 main -lxxx ( -l:后面加库的名称)
有三种方法 1.必须将库文件放到指定路径下/usr/lib64或/usr/lib
2.设置存放链接库时搜索路径的环境变量将当前库文件所在的路径添加进去 export LIBRARY_PATH$LIBRARY_PATH:. 冒号链接路径. 表示当前路径该路径下存在静态库和动态库但链接的是动态库因为gcc默认链接的是动态库.
3.使用gcc -L选项指定链接库的搜索路径gcc main.c -o mian -L./ -lchild 该方法可以链接编译成功但是运行不能通过.
⭐运行可执行程序时加载使用 仅仅针对动态库才会在运行时加载库文件有两种方法 1.必须将库放到指定路径下/usr/lib64或/usr/lib
2.设置链接库的加载路径的环境变量将当前库文件所在路径加进去 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:. OK看了前面的几种方法我们不由产生好奇生成可执行程序时链接库的第三种方法编译通过但是运行不成功这种方式是不是很鸡肋其实该方法才是我们日常应用最多的方式采用-L指定库的所在路径我们链接静态库将静态库放到指定的文件下然后链接请看
OK今天笔者先总结到这里。如有问题或者疑惑欢迎各位小伙伴们指出。我们一起交流一起进步
原文链接https://blog.csdn.net/weixin_44747239/article/details/106384103