12

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

在构建时openssl,我给出了选项./Configure no-shared,它创建了很多.a文件。

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

例如libcrypto.a

如果我完全走错了路,请有人给我建议。

4

3 回答 3

11

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

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

以 Apache 为例,文件的动态加载在.so文档的动态共享对象 (DSO)部分中进行了描述。您还可以找到安装部分的链接,该部分描述了如何在构建时包含静态库。

有一个很好的问题可以很好地阅读,并提供主题中的细节。

共享对象 (.so)、静态库 (.a) 和 DLL (.so) 之间的区别?

于 2013-10-28T14:07:08.403 回答
1

如果 Aa 是静态库并且两个不同的程序想要使用它。Aa 为每个程序创建两次。而如果 A.so 是动态库,则两个程序访问同一个文件。这意味着您在图书馆中使用参考。

如果您的库要在多个可执行文件(如 apache 和 openssl)之间共享,则将其动态化以减小可执行文件的大小通常是有意义的。否则,一定要把它变成静态的。

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

于 2013-10-28T13:18:22.640 回答
0

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

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

你将学习 -

  1. 什么是静态库(.a)以及如何制作它。
  2. 什么是共享库(.so)以及如何制作它。
  3. 与 .ddl(Windows 操作系统)的区别
于 2014-12-17T08:51:13.780 回答