首页 > 代码库 > linux下的动态链接库和静态链接库到底是个什么鬼?(二)动态链接库的编译与使用
linux下的动态链接库和静态链接库到底是个什么鬼?(二)动态链接库的编译与使用
上一篇文章里大概描述linux下静态链接库的编译与使用,下面讲动态链接库的编译与使用方法。
1. 什么是动态链接库
所谓动态链接库,是指编译的时候不会把程序引用到的库插入到执行程序里,而是在执行时候才会去加载相关的库,所有用到此库的程序可以共享一份代码。
这样带来的好处是可执行程序所占的空间变小了,同时,如果库需要升级,你并不需要重新编译你的程序,只要把相关的库升级即可。
2. 动态链接库的编译与使用方法
使用和上一篇文章相同的代码:main.c sum.c sum.h
在 linux 下动态链接库文件一般是这样的名字: libxxx.so
复制代码 lv@lenovo: $ ls main.c sum.c sum.h lv@lenovo: $ lv@lenovo: $ gcc -c -fPIC sum.c ## -fIPC告诉编译器将源代码编译成共享的object文件,PIC(Position-Independent Code)意思是非位置依赖性代码 lv@lenovo: $ ls main.c sum.c sum.h sum.o lv@lenovo: $ gcc -shared -fPIC -o libsum.so sum.o ## 生成动态链接库文件libsum.so lv@lenovo: $ ls libsum.so main.c sum.c sum.h sum.o lv@lenovo: $ lv@lenovo: $ gcc -o sumappd main.c -L . -lsum ## 生成可执行程序 lv@lenovo: $ ls libsum.so sum.c sum.o main.c sum.h sumappd lv@lenovo: $ ./sumappd ## 运行生成结果 Num1 + Num2 = 3
结论: 编译时”-lsum“的方式,是不能够区分当前是静态链接还是动态链接的。
如果在同一个目录下同时有静态链接库和动态链接库,则系统默认会引用动态链接库,如果想使用静态链接库则需要在编译时加上”-static“参数。
(注:若使用C++编写,编译的时候将 gcc 改用 g++ 即可)
linux下的动态链接库和静态链接库到底是个什么鬼?(二)动态链接库的编译与使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。