我了解到.so是动态库文件,而.a是静态库文件。 在构建openssl时,我使用了选项./Configure no-shared,它创建了很多.a文件。 那么,我的问题是其他软件包(如apache)是否能够使用来自openssl的.a文件? 举个例子:libcrypto.a, 请问是否有人能指导我,我是否完全走错了路。
基本上,静态库可以在链接时编译到另一个应用程序中。在您的示例中,Apache 可以在构建时使用 libcrypto.a 并将其包含在 Apache httpd 应用程序中。动态 .so 库可以在运行时加载和卸载,并且您具有更好的灵活性来更改 Apache 应支持什么而无需重新编译 Apache 二进制文件。以 Apache 为例,动态加载 .so 文件的使用方法在文档中的Dynamic Shared Object (DSO)部分中有描述。您还可以找到链接到安装部分的链接,其中描述了如何在构建时包含静态库。这方面有一个很好的问题,值得一读,并提供了更多主题细节。 共享对象 (.so)、静态库 (.a) 和 DLL (.so) 之间的区别是什么?
如果A.a是静态库,两个不同的程序想要使用它。对于每个程序,A.a会被创建两次。而如果A.so是动态库,则两个程序访问同一个文件。这意味着你在库中使用了引用。如果你的库将在多个可执行文件(如apache和openssl)之间共享,通常将其设置为动态库可以减少可执行文件的大小。否则,一定要将其设置为静态库。在你的情况下,你必须创建动态库。
请阅读 - http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html。这是一个非常好的教程,有示例。你将学到 - 什么是静态库(.a)以及如何制作它。 什么是共享库(.so)以及如何制作它。 .ddl(Windows操作系统)的区别