Linux 动态函数库【ZT】
windows里面的动态函数库文件是以dll结尾的文件
linux中一般
.so 为共享库
.a为静态库
.la为libtool自动生成的一些共享库,可以用vi编辑查看,主要记录了一些配置信息。可以用如下命令查看*.la文件的格式
$file *.la
我们可以用ldd命令来得知目前该执行档共用了哪些动态函数库 :
[root@hlchou /root]# ldd test
libc.so.6 => /lib/libc.so.6 (0x40016000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
共用了两个动态函式库,分别为 libc.so.6 与 ld-linux.so.2。
我们还可以透过 file 指令,来得知该执行档的相关属性,如下
[root@hlchou /root]# file test
test: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically
linked (use s shared libs), not stripped
not stripped 表示这个执行档还没有透过 strip 指令来把执行时用不到的符号、以及相关除错的资讯删除
通过strp命令可以进行压缩,
[root@hlchou /root]# ls -l test
-rwxr-xr-x 1 root root 11694 Oct 24 02:31 test
经过strip後,则变为 3004 bytes
[root@hlchou /root]# strip test
[root@hlchou /root]# ls -l test
-rwxr-xr-x 1 root root 3004 Oct 24 02:48 test
在 Linux 上使用动态函数库的执行档,几乎都会去呼叫 libc.so.6 与 ld-linux.so.2 这两个动态函数库,ld-linux.so.2 算是最底层的动态函式库,它本身为静态联结,主要的工作是提供基本的函式给其他的函数库,而我们最常会呼叫的 libc.so.6 则是以 ld-linux.so.2 为基础的一个架构完成的动态函数库,它几乎负责了所有我们常用的标准 C 函数库,像是我们在 Linux 下写的 Socket 程序,其中的connect()、bind()、send() …..之类的函数,都是由 libc.so.6 所提供的。
转载请注明:在路上 » Linux 动态函数库