什么是.a和.so文件?


Answers:


483

归档库(.a)是静态链接的,即在gcc中使用-c选项编译程序时。因此,如果库中有任何更改,则需要重新编译并构建代码。

.so(共享库)优于.a库的优点是,它们在运行时即在gcc中创建.o file -o选项后就链接了。因此,如果.so文件中有任何更改,则无需重新编译主程序。但是请确保使用ln命令将主程序链接到新的.so文件。

这将帮助您构建.so文件。 http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

希望这可以帮助。


2
这些与pic(位置无关代码)有关吗?
Transang

213

.a是静态库。如果您使用存储在其中的代码,则会从它们中获取并嵌入到自己的二进制文件中。在Visual Studio中,这些将是.lib文件。

.so是动态库。如果使用存储在其中的代码,则不会将其嵌入到您自己的二进制文件中。相反,它只是被引用,因此二进制文件将依赖于它们,并且来自so文件的代码将在运行时添加/加载。在Visual Studio / Windows中,这些文件将是.dll文件(带有包含链接信息的小型.lib文件)。


嗨,有什么方法可以反编译C / C ++代码中的.so文件?
吉桑(Jishant)'17


的一个小.lib文件.dll称为导入库。
面向货币的程序员,

13

.a文件通常是静态链接(或更准确地说是存档)的
库, .so是动态链接的库。

要进行移植,您将需要经过编译以使其成为源代码的源代码,或AIX机器上的等效文件。


如何构建我的应用程序以使用.so文件?
2012年

建立这两种类型的库并在网络上链接它们都有许多出色的参考。Google是您的朋友。
David Pointer

@Dunc-有两种方法。你有一个makefile吗?通常,汇编整个程序(并因此调用链接器)的命令将使用-L / dir / dir1 /.../指定要查找库文件的位置,也可能使用-lname显式命名库。您会发现实际名称是libname.a或libname.so。然后,链接器可以弄清楚如果这是一个正常的程序,该怎么办。但是您仍然存在制作或查找.so文件的问题。您有构建它的源代码还是AIX库?
gbulmer 2012年

10

它们用于链接阶段。.a文件是静态链接的,.so文件是排序链接的,因此每当您运行exe时都需要该库。

您可以通过查看任何lib目录来找到它们的存储位置…… /usr/lib/lib拥有其中的大多数目录,并且还有LIBRARY_PATH环境变量。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.