我已经读过.so
是一个动态库文件,而.a
是一个静态库文件。
在构建openssl
时,我提供了./Configure no-shared
选项,并创建了大量.a
个文件。
所以,我的问题是像apache这样的其他软件包是否可以使用openssl中的.a
文件?
例如libcrypto.a
,
答案 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
这是一个非常好的教程,例如。