.a 和 .so 文件是什么?

问题描述 投票:0回答:6

我目前正在尝试将 C 应用程序移植到 AIX,但我感到很困惑。什么是 .a 和 .so 文件以及它们在构建/运行应用程序时如何使用?

c unix compilation shared-libraries .a
6个回答
624
投票

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

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

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


279
投票

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

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


13
投票

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

要进行移植,您将需要编译来制作它们的源代码,或 AIX 计算机上的等效文件。


11
投票

它们用于链接阶段。

.a
文件是静态链接的,而
.so
文件是某种链接的,因此每当您运行 exe 时都需要该库。

您可以通过查看任何 lib 目录来找到它们的存储位置...

/usr/lib
/lib
拥有其中的大部分,还有
LIBRARY_PATH
环境变量。


3
投票

维基百科是此信息的一个不错的来源。

要了解 .a 等静态库文件,请阅读 静态库

要了解 .so 等共享库文件,请阅读 Library_(computing)#Shared_libraries 在此页面上,文件命名部分中还有有用的信息。


0
投票

在类 Unix 操作系统中,软件库在实现代码重用和高效程序开发方面发挥着至关重要的作用。两种常见的库类型是静态库(以 .a 文件表示)和共享库(以 .so 文件表示)

来源:了解.A和.So文件

© www.soinside.com 2019 - 2024. All rights reserved.