学习Linux下链接共享库的原理与使用方法(linux链接共享库)
学习Linux下链接共享库的原理与使用方法
许多开发者时常使用Linux下的动态链接库(dynamic linking library),又称共享库(Shared Library),这种库经过编译链接,可以被多个应用程序同时使用,而不需要反复多次编译链接,从而节省内存空间和计算机时间。那么Linux下链接共享库的原理又是什么呢?本文就Linux下链接共享库的原理与使用方法进行讲解。
Linux下链接共享库是利用惰性绑定(lazy binding)相关技术将被多个程序共同使用的代码 or 数据模块进行一次编译,共同生成共享库,而不是分别编译成独立的目标文件,其原理如下:
1. 在编译生成的可执行程序中,通常会包含一些函数调用指令,但是该指令对应的函数所在的位置并未确定;
2. 当程序加载到内存后,系统会根据动态链接库的记录,自动将共享库加载进内存,而程序中的相应函数调用就会替换成该函数在共享库中的具体位置;
3. 如此,程序就可以正常调用共享库中的函数,从而实现了共享库的链接过程。
Linux下链接共享库的使用过程则主要步骤如下:
1. 首先,我们需要将要编译的代码文件编译成共享文件,这可以通过GCC中的 -fPIC 参数;
2. 然后,编译器会将编译后的目标文件生成一个共享库文件,形如lib.so;
3. 再则,将生成的共享库文件拷贝至系统lib目录或者指定的目录,以便被调用;
4. 最后,通过-L参数将要连接的共享库目录指定由编译器编译生成可执行程序至该目录,而-l参数则表示将要调用的共享库;
以上就是Linux下链接共享库的原理与使用方法,如果能正确使用,可以帮助开发者节省大量开发时间。以下是示例代码:
#include
#include //sin_sample.h 中声明了sin_sample功能
int main(int argc, char** argv)
{
float angle = 3.14f / 2.0f;
printf(“%f\n”,sin_sample(angle));
return 0;
}
// 编译命令:gcc dynamic_library_example.c -L. -lsin_sample -o dynamic_library
// 运行程序 ./dynamic_library
总结
综上,Linux下链接共享库的原理与使用方法是这样的:共享库依靠惰性绑定(lazy binding)技术将多个程序共同使用的代码or数据模块进行一次编译,而在程序加载到内存后,入口函数调用将会指向共享库中的函数;使用共享库的步骤是:将需要编译文件编译成共享文件,然后将生成的共享库文件拷贝至系统lib目录或者指定的目录,最后将该目录指定到编译器。正确的使用共享库就能达到节省计算时间的目的。