Welcome 微信登录

首页 / 操作系统 / Linux / Linux下GCC创建、链接静态库实例

静态库和动态库的区别:静态库(xxx.a):GCC在编译生成可执行程序时,从静态库中提取必要的目标文件,在可执行程序编译成功时,同时包含了目标文件,这样带来的缺点是当多个可执行程序同时调用一个库文件时,加载到内存中的库文件可能存在重复,这是对内存的一个极大的浪费,但是由于编译时已经把库文件中需要的目标程序拷贝过来,因此可执行程序初次加载的速度是比动态库略显快些。动态库(xxxx.so):GCC在编译生成执行程序时,拷贝到可执行程序中的仅仅是一个库的地址(可以理解为指针),这样当多个可执行程序利用同一个动态库时,加载到内存中的库文件仅仅需要一份就可以了,这样大大的保护的珍贵的内存资源,略为不足的是当执行可执行文件时,需要通过地址寻找动态库文件,这个过程耗费了些许的时间。下边是一个静态库创建使用的实例:[root@localhost ~]# cd /gcc/ar/[root@localhost ar]# mkdir include[root@localhost ar]# mkdir lib建立头文件:mylib.h[root@localhost ar]# vim include/mylib.h   int func1(int x,int y); void func2(int x);建立以下的源文件:main.c、func1.c、func2.c[root@localhost ar]# vim main.c  #include <stdio.h>#include "mylib.h" int main(void){        int i;        i = func1(1,2);        func2(i);        return 0;}~  [root@localhost ar]# vim func1.c #include "mylib.h" int func1(int x,int y){        return(x+y);}~    [root@localhost ar]# vim func2.c #include <stdio.h>#include "mylib.h" void func2(int x){        printf("The result is %d ",x);}~生成目标文件   [root@localhost ar]# gcc -Wall -O -c func1.c –Linclude[root@localhost ar]# gcc -Wall -O -c func2.c –Iinclude[root@localhost ar]# gcc -Wall -O -c main.c –Iinclude生成库文件[root@localhost ar]#cd lib/[root@localhost lib]# ar cr libethnicity.a  ../func1.o ../func2.o[root@localhost lib]# ar t libethnicity.afunc1.ofunc2.o编译生成可执行文件(这里采用三种方式)1)采用-L library ,-I include方式[root@localhost ar]# gcc -Wall -O main.o -Llib -lethnicity -o wanyan[root@localhost ar]# ./wanyan The result is 32)采用添加到系统库的方式[root@localhost ar]# cp lib/libethnicity.a  /usr/lib[root@localhost ar]# gcc -Wall -O main.o -lethnicity -o ethnicitybeta[root@localhost ar]# ./ethnicitybeta The result is 33)修改本地.bash_profile的方式[root@localhost ar]# export LIBRARY_PATH=/gcc/ar/lib:$LIBRARY_PATH[root@localhost ar]# gcc -Wall -O main.o -lethnicity -o laji[root@localhost ar]# ./laji The result is 3实验结束总结:这个小实验是对小布老师视频学习的一个笔记,之所以采用的代码十分的简单,是因为这个实验是为了了解静态库建立使用的远离,最后列出了三种GCC编译时加载静态库的方法,十分的实用。实现全自动安装Linux系统Linux下编译PHP 5.3.8 出错:make: *** [sapi/fpm/php-fpm] Error 1相关资讯      gcc 
  • gcc: error trying to exec "  (今 06:25)
  • GCC 6.1带来新的C++17特性、完全支  (05月06日)
  • Linux环境下使用GCC编译,GDB反汇  (03月30日)
  • 用GCC进行程序的编译  (06月14日)
  • GNU编译器套件GCC 6.1发布 默认使  (04月28日)
  • 让GCC支持成员函数模板的trick  (03月10日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数


评论声明
    版权所有©石家庄振强科技有限公司2024 冀ICP备08103738号-5 网站地图