.so文件和.a文件之间的区别?

时间:2013-10-28 11:06:01

标签: linux apache dynamic static openssl

我已经读过.so是一个动态库文件,而.a是一个静态库文件。

在构建openssl时,我提供了./Configure no-shared选项,并创建了大量.a个文件。

所以,我的问题是像apache这样的其他软件包是否可以使用openssl中的.a文件?

例如libcrypto.a

如果我正走错路,请有人建议我。

3 个答案:

答案 0 :(得分:9)

基本上,静态库可以在链接时将编译成另一个应用程序。在您的示例中,Apache可以在构建期间使用libcrypto.a并将其包含在Apache httpd应用程序中。

可以在运行时加载和卸载动态.so库,并且您可以更灵活地更改Apache应该支持的内容,而无需重新编译Apache二进制文件。

使用Apache作为示例,.so文件的动态加载在文档的Dynamic Shared Object (DSO)部分中进行了描述。您还可以找到安装部分的链接,其中描述了如何在构建时包含静态库。

有一个很好的问题,这可能是好的阅读,并提供主题的微尘细节。

Difference between shared objects (.so), static libraries (.a), and DLL's (.so)?

答案 1 :(得分:1)

如果A.a是静态库,则两个不同的程序想要使用它。 A.a为每个程序创建两次。而如果A.so是动态库,则两个程序访问同一个文件。 它的意思是你在库中使用引用。

如果您的库将在多个可执行文件(如apache和openssl)之间共享,那么通常可以使其动态化以减小可执行文件的大小。否则,一定要让它静止。

在您的情况下,您必须创建动态库

答案 2 :(得分:0)

请阅读 - http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

这是一个非常好的教程,例如。

你将学习 -

  1. 什么是静态库(.a)以及如何制作它。
  2. 什么是共享库(.so)以及如何制作它。
  3. 与.ddl(windows os)
  4. 的区别