linux编译动态库linux编译动态库和静态库的makefile示例

2024-08-16 02:52:53 浏览

动态链接库和静态链接库一般是编译集成一系列的接口(函数)

linux编译库linux编译库和静

在程序源代码编译完成后通过编译器编译并通过链接器与这些库进行链接

动态链接库与静态链接库的区别在于链接器在进行链接时静态库会被直接编译进程序里

而动态链接库并不会,我们这里将这些链接库称作依赖(动态库和静态库)

程序的运行需要这些依赖,程序在静态链接后该程序本身便已包含该依赖

而动态链接后的程序本身本不包含该依赖,这些依赖需要执行者自行安装进操作系统(动态库、运行时库)

程序运行时会动态地加载这些库

linux上动态库一般的后缀后为.so

静态库一般的后缀为.a

由于静态链接会直接将库编译进程序里所以静态编译后的程序相较于动态链接所要大

这就是因为静态链接会将链接库编译进程序里的原因,所以占用就要大了

出于这种原因,静态库不易于维护与更新,如果链接库中有实现有bug等需要更新则需要更新整个程序,因为静态库被编译进程序中了

但动态库就没有这种情况了,因为动态库是程序运行时动态加载的,所以我们只需要更新动态库而不需要更新所有依赖该库的程序(软件)

另一方面,很多程序的开发都会使用到相同的链接库,也就是很多程序(软件)会有相同的依赖

如果将这些依赖全部静态编译的话将会造成存储资源占用过多而造成资源浪费

而使用动态库的方式这些程序(软件)则可以共享一个链接库,而不需要每个程序都带一个链接库,这样就大大地减少了存储资源占用空间

比如我需要添加一个叫*.so.*的文件,这个*.so文件在/ETC目录下(随便定的目录) 在.pro文件里添加: LIBS += -L /etc/ -l* 在.cpp引用的时候,还需要把相关的头文件包含进去

linux系统中,要添加自己的库文件路径,可以使用以下方法之一:

使用LD_LIBRARY_PATH环境变量:通过设置LD_LIBRARY_PATH环境变量,可以告诉动态链接器(ld.so)在程序运行时搜索共享库时要包括的额外路径。可以按照以下步骤进行设置:

其中,/path/to/your/library是你自己库文件的路径。你可以将上述命令添加到你的SHEll配置文件(例如.bashrc或.bash_profile)中,这样每次启动终端时都会自动设置该环境变量。

这将使动态链接器能够找到并加载你指定的库文件路径。

注意:在使用上述方法时,确保你的库文件已经被正确编译和安装到指定的路径中。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。