静态库的作用是什么?

静态库的作用是什么?

静态库默认位于/usr/lib或 中,/usr/lib64但我使用此命令在我的操作系统中删除了它们:

find / -name *.a -exec rm -rf {} \;

我的Linux已经正常并且一切运行良好!

我们能说吗?

“Package.rpm 或 *.deb 包含编译器输出,它们只需要共享库。

而当我们从源代码安装软件时,如果在结构中使用静态库,则链接器在编译期间将静态库复制到它的可执行文件中。

如果我的系统中没有*.a文件,那么将来如果我从源代码安装软件,我可能会遇到问题”

请用简单的方式向我解释一下

答案1

静态库是二进制文件在编译时使用的库。它们通常不会在运行时再次使用,因为它们在编译时与已编译的二进制文件链接并成为二进制文件本身的一部分。

此外,在实现上,这些不在二进制文件之间共享,只有使用特定静态库编译的二进制文件才使用这些库。因此在应用中,这些与静态链接库完全相反。

注意,静态库以 结尾,.a而动态库以 结尾.so

答案2

静态库是已编译源代码的二进制独立包,在以静态方式构建应用程序时将其“导入”到应用程序中。

实际上,一个称为链接器的程序会将其编译的代码与您的编译的源代码一起进行某种“复制和粘贴”(这有点复杂,但这种解释可以很好地响应您的请求......)。

然后,您在 OP 中报告的消息综合起来说,从目录“lib”中删除静态库不会对已安装程序产生问题,因为如上所述,它们已经“粘贴”在已安装程序的二进制文件中,并且这可能发生在 Linux 中,因为它的程序通常由其未编译的源代码直接分发,因此它们需要一个编译步骤,通常是通过 rpm 或其他 Linux 包/安装管理器来完成的。

相反,正如发布的消息中总是说的那样,如果您安装新程序,则安装可能会失败(如果它们需要删除库),因为在编译时,链接器将找不到所需的(引用的)静态库。

我希望说清楚了,抱歉我的英语不好。

相关内容