25

我正在尝试编译第 3 方库(在 linux 上)并看到它正在生成 libsomething.a 文件我有我的其他库是 .so 文件

但似乎 .a 也是共享库,可以像 .so 库一样使用

那么这两者有什么区别吗?或者它们只是相同的不同命名约定。

4

3 回答 3

32

文件.a静态库,而.so文件是类似于Windows 上的共享对象动态库。DLL

可以 在编译期间作为程序的一部分.a包含在程序中,并且可以在加载程序时导入.so

于 2012-09-06T05:41:41.407 回答
20

但似乎 .a 也是共享库

不,它是一个静态库。

并且可以像 .so lib 一样使用

如果你的意思是链接到它,那么是的。但是你不能 dlopen() 一个 .a 文件,你可以用一个 .so 文件来做。

您可以随时请我们的老朋友G叔为您解答。

于 2012-09-06T05:35:14.070 回答
19

当您链接到 时*.a,库中的代码包含在可执行文件本身中,并且可执行文件可以在不需要*.a文件存在的情况下运行。当您链接到*.so时,情况并非如此,并且该*.so文件必须在运行时存在。

于 2012-09-06T05:50:20.223 回答