静态库和动态库的区别有哪些?
静态库和动态库的区别有哪些?
1。 libtest/ 2。 |-- lt。c 3。 |-- lt。h 4。 `-- test。c #lt。c 1。 4。 5。 #include 6。 7。 void myprint(void) 8。 { 9。 printf("Linux library test!\n"); 10。
} # lt。h 1。 4。 5。 void myprint(void); #test。c 1。 4。 5。 #include "lt。h" 6。 7。 int main(void) 8。 { 9。 myprint(); 10。 return 0; 11。
} 先看静态库 首先做成静态库 liblt。a 。 1。 $ gcc -o lt。o -c lt。c 2。 $ ar cqs liblt。a lt。o再者,链接,1。 $ gcc test。o liblt。a -o test这个时候再来看他的引用库情况。
1。 $ ldd test 2。 linux-gate。so。1 => (0xffffe000) 3。 libc。so。6 => /lib/libc。so。6 (0xb7e29000) 4。 /lib/ld-linux。so。2 (0xb7f6e000) 动态库 做成动态库 liblt。
so 。 1。 $ gcc -o lt。o -c lt。c 2。 $ gcc -shared -Wall -fPIC -o liblt。so lt。o -shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。
相当于一个可执行文件 -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。 -L。:表示要连接的库在当前目录中-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上。
so来确定库的名称LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。 链接方法I,拷贝到系统库里再链接,让gcc自己查找1。 $ sudo cp liblt。so /usr/lib 2。 $ gcc -o test test。
o -llt这里我们可以看到了 -llt 选项,-l[lib_name] 指定库名,他会主动搜索lib[lib_name]。so。这个搜索的路径可以通过 gcc --print-search-dirs来查找。 链接方法II,手动指定库路径1。
$ cc -o test test。o -llt -B /path/to/lib这里的-B 选项就添加 /path/to/lib 到gcc搜索的路径之中。这样链接没有问题但是方法II中手动链接好的程序在执行时候仍旧需要指定库路径(链接和执行是分开的)。
需要添加系 统变量LD_LIBRARY_PATH : 1。 $ export LD_LIBRARY_PATH=/path/to/lib 这个时候再来检测一下test程序的库链接状况(方法I情况) 1。 $ ldd test 2。 linux-gate。
so。1 => (0xffffe000) 3。 liblt。so => /usr/lib/liblt。so (0xb7f58000) 4。 libc。so。6 => /lib/libc。so。6 (0xb7e28000) 5。 /lib/ld-linux。
so。2 (0xb7f6f000)恩,是不是比静态链接的程序多了一个 liblt。so ?恩,这就是静态与动态的最大区别,静态情况下,他把库直接加载到程序里,而在动态链接的时候,他只是保留接口,将动态库与程序代码独立。这样就可以提高代码的可复用度,和降低程序的耦合度。
另外,运行时,要保证主程序能找到动态库,所以动态库一般发布到系统目录中,要么就在跟主程序相对很固定的路径里,这样不管主程序在本机何时何地跑,都能找得到动态库。而静态库只作用于链接时,运行主程序时,静态库文件没存在意义了。
答:动态网页,将内容对象化,应用编程语言来操作页面上的对象,不必通过服务器就可以与用户交互信息,更新页面的内容。静态网页一旦被下载到客户端浏览器后,就无法改变显示内...详情>>
问:dell win8系统i7 怎么分盘 这只有一个c盘可以吗 如果分盘 怎么分详解...
答:操作步骤 1、经典桌面下系统下同时按住键盘上“Win键”和“X”键打开系统菜单 ,选择“磁盘管理”。 2、对准想要划分的分区右键,选择“压缩卷” 。 3、填入想...详情>>
答:保护系统安全,是指从整体电子商务系统或网络支付系统的角度进行安全防护,它与网络系统硬件平台、操作系统、各种应用软件等互相关联详情>>