- 论坛徽章:
- 0
|
本帖最后由 zhangsuozhu 于 2010-08-12 13:00 编辑
外部库有两种:
(1)静态连接库libc.a
(2)共享连接库libc.so
两者的共同点:
.a, .so都是.o目标文件的集合,这些目标文件中含有一些函数的定义(机器码),而这些函数将在连接时会被最终的可执行文件用到。
两者的区别:
静
态库.a : 当程序与静态库连接时,库中目标文件所含的所有将被程序使用的函数的机器码被copy到最终的可执行文件中. 静态库有个缺点:
占用磁盘和内存空间. 静态库会被添加到和它连接的每个程序中, 而且这些程序运行时, 都会被加载到内存中. 无形中又多消耗了更多的内存空间.
共
享库.so : 与共享库连接的可执行文件只包含它需要的函数的引用表,而不是所有的函数代码,只有在程序执行时,
那些需要的函数代码才被拷贝到内存中, 这样就使可执行文件比较小,
编译时要联静态库要加 -static 参数- gcc test.c
- ls -l a.out
- -rwxr-xr-x 1 alanx alanx 7057 2010-08-12 12:57 a.out
- gcc -static test.c
- ls -l a.out
- -rwxr-xr-x 1 alanx alanx 495437 2010-08-12 12:58 a.out
复制代码 |
|