我知道.so
文件是一种动态库(很多线程可以共享这样的库,因此在内存中不需要多个副本)。但是.a
和之间有什么区别.la
?这些都是静态库吗?
如果动态库比静态库具有很大的优势,那么为什么仍然有很多静态库?
我还想知道加载库(两种)的基本机制,以及在某处使用lib时如何调用一段代码。我应该学习内核的哪一部分?我应该了解什么相关的Linux命令/实用程序才能知道进程如何运行?(我现在只知道ld
命令)
什么时候应该尝试将代码内置到.so
或中.a
?哪一个更好?
[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep 2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror 931 Sep 2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep 2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep 2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror 932 Sep 2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep 2 23:25 openvpn-plugin-down-root.so