出處: http://blog.chinaunix.net/uid-27105712-id-3313293.html
linux 下有動態庫和靜態庫,動態庫以.so爲擴展名,靜態庫以.a爲擴展名。二者都使用廣泛。本文主要講動態庫方面知識。
- # ldd
/bin/ls
- linux-vdso.so.1
=>
(0x00007fff597ff000)
- libselinux.so.1
=>
/lib64/libselinux.so.1
(0x00000036c2e00000)
- librt.so.1
=>
/lib64/librt.so.1
(0x00000036c2200000)
- libcap.so.2
=>
/lib64/libcap.so.2
(0x00000036c4a00000)
- libacl.so.1
=>
/lib64/libacl.so.1
(0x00000036d0600000)
- libc.so.6
=>
/lib64/libc.so.6
(0x00000036c1200000)
- libdl.so.2
=>
/lib64/libdl.so.2
(0x00000036c1600000)
- /lib64/ld-linux-x86-64.so.2
(0x00000036c0e00000)
- libpthread.so.0
=>
/lib64/libpthread.so.0
(0x00000036c1a00000)
- libattr.so.1 => /lib64/libattr.so.1 (0x00000036cf600000)
- #include <stdio.h>
- #include <iostream>
- #include <string>
- using namespace std;
- int main ()
- {
- cout <<
"test" << endl;
- return 0;
- }
- # g++
-o demo main.cpp
- # ldd demo
- linux-vdso.so.1
=>
(0x00007fffcd1ff000)
- libstdc++.so.6
=>
/usr/lib64/libstdc++.so.6
(0x00007f4d02f69000)
- libm.so.6
=>
/lib64/libm.so.6
(0x00000036c1e00000)
- libgcc_s.so.1
=>
/lib64/libgcc_s.so.1
(0x00000036c7e00000)
- libc.so.6
=>
/lib64/libc.so.6
(0x00000036c1200000)
- /lib64/ld-linux-x86-64.so.2 (0x00000036c0e00000)
- # g++
-o demo -lz
-lm -lrt main.cpp
- # ldd demo
- linux-vdso.so.1
=>
(0x00007fff0f7fc000)
- libz.so.1 => /lib64/libz.so.1 (0x00000036c2600000)
- librt.so.1 => /lib64/librt.so.1 (0x00000036c2200000)
- libstdc++.so.6
=>
/usr/lib64/libstdc++.so.6
(0x00007ff6ab70d000)
- libm.so.6 => /lib64/libm.so.6 (0x00000036c1e00000)
- libgcc_s.so.1
=>
/lib64/libgcc_s.so.1
(0x00000036c7e00000)
- libc.so.6
=>
/lib64/libc.so.6
(0x00000036c1200000)
- libpthread.so.0
=>
/lib64/libpthread.so.0
(0x00000036c1a00000)
- /lib64/ld-linux-x86-64.so.2 (0x00000036c0e00000)
- # strace ./demo
- execve("./demo",
["./demo"],
[/* 30 vars
*/])
= 0
- ...
= 0
- open("/lib64/libz.so.1", O_RDONLY)
= 3
- ...
- close(3)
= 0
- open("/lib64/librt.so.1", O_RDONLY)
= 3
- ...
- close(3)
= 0
- open("/usr/lib64/libstdc++.so.6", O_RDONLY)
= 3
- ...
- close(3)
= 0
- open("/lib64/libm.so.6", O_RDONLY)
= 3
- ...
- close(3)
= 0
- open("/lib64/libgcc_s.so.1", O_RDONLY)
= 3
- ...
- close(3)
= 0
- open("/lib64/libc.so.6", O_RDONLY)
= 3
- ...
- close(3)
= 0
- open("/lib64/libpthread.so.0", O_RDONLY)
= 3
- ...
- close(3)
= 0
- ...
- # ldd -u demo
- Unused direct dependencies:
- /lib64/libz.so.1
- /lib64/librt.so.1
- /lib64/libm.so.6
- /lib64/libgcc_s.so.1
- # g++
-Wl,--as-needed
-o demo -lz
-lm -lrt main.cpp
- # ldd demo
- linux-vdso.so.1
=>
(0x00007fffebfff000)
- libstdc++.so.6
=>
/usr/lib64/libstdc++.so.6
(0x00007ff665c05000)
- libc.so.6
=>
/lib64/libc.so.6
(0x00000036c1200000)
- libm.so.6
=>
/lib64/libm.so.6
(0x00000036c1e00000)
- /lib64/ld-linux-x86-64.so.2
(0x00000036c0e00000)
- libgcc_s.so.1
=>
/lib64/libgcc_s.so.1
(0x00000036c7e00000)
- # ldd -u demo
- Unused direct dependencies: