LINUX动态链接库的创建与使用
对于动态链接库来说,程序的可执行文件当中会留有一个它的标记,当程序运行到相应的标记的时候,就会调用相应的动态库。由于动态库节省空间,所以一般linux下面链接程序的时候都是默认的按照动态方式链接的。
如何更新linux系统动态链接库/usr/local/lib/usr/lib
可以放在当前目录下,但是要设置一下库文件的路径:LD_LIBRARY_PATH=./:/usr/local/pet20/lib:/lib/:/usr/local/lib export LD_LIBRARY_PATH 这样,在调用的时候就会自动从当前目录找。
如果是显式调用则不用,只要在程序里指定.so的文件路径就可以了。所以放在当前目录下也是没问题的。
动态链接与静态链接有什么差别
动态链接库和静态链接库一般是编译集成一系列的接口(函数)在程序源代码编译完成后通过编译器编译并通过链接器与这些库进行链接动态链接库与静态链接库的区别在于链接器在进行链接时静态库会被直接编译进程序里而动态链接库并不会,我们这里将这些链接库称作依赖(动态库和静态库)程序的运行需要这些依赖,程序在静态链接后该程序本身便已包含该依赖而动态链接后的程序本身本不包含该依赖,这些依赖需要执行者自行安装进操作系统(动态库、运行时库)程序运行时会动态地加载这些库linux上动态库一般的后缀后为.so静态库一般的后缀为.
a由于静态链接会直接将库编译进程序里所以静态编译后的程序相较于动态链接所要大这就是因为静态链接会将链接库编译进程序里的原因,所以占用就要大了出于这种原因,静态库不易于维护与更新,如果链接库中有实现有bug等需要更新则需要更新整个程序,因为静态库被编译进程序中了但动态库就没有这种情况了,因为动态库是程序运行时动态加载的,所以我们只需要更新动态库而不需要更新所有依赖该库的程序(软件)
另一方面,很多程序的开发都会使用到相同的链接库,也就是很多程序(软件)会有相同的依赖如果将这些依赖全部静态编译的话将会造成存储资源占用过多而造成资源浪费而使用动态库的方式这些程序(软件)则可以共享一个链接库,而不需要每个程序都带一个链接库,这样就大大地减少了存储资源占用空间
动态链接和静态链接是两种不同的链接方式,其主要区别如下:
静态链接
静态链接是在编译时将所有需要的库文件和目标文件链接成一个可执行文件。在程序运行时,所有的代码和数据都被加载到内存中,程序就可以直接执行。静态链接的优点是程序运行速度快,但缺点是可执行文件比较大,占用磁盘空间较多。
动态链接
动态链接是在程序运行时才将需要的库文件加载到内存中,并与程序进行链接。这样可以减小可执行文件的大小,节省磁盘空间。动态链接的优点是节省内存空间,但缺点是程序运行速度相对较慢。
区别
静态链接和动态链接的主要区别在于链接的时间不同。静态链接是在编译时进行的,而动态链接是在程序运行时进行的。静态链接生成的可执行文件比较大,但运行速度快;动态链接生成的可执行文件比较小,但运行速度相对较慢。另外,动态链接可以实现代码共享,多个程序可以共享同一个库文件,从而节省内存空间。
静态链接和动态链接各有优缺点,应根据实际情况选择适合的链接方式。
还没有评论,来说两句吧...