【发布时间】:2012-04-06 05:49:54
【问题描述】:
我目前正在尝试将 C 应用程序移植到 AIX 并且感到困惑。什么是 .a 和 .so 文件以及在构建/运行应用程序时如何使用它们?
【问题讨论】:
-
一个是库
archive,另一个是sharedobject
标签: c unix compilation shared-libraries .a
我目前正在尝试将 C 应用程序移植到 AIX 并且感到困惑。什么是 .a 和 .so 文件以及在构建/运行应用程序时如何使用它们?
【问题讨论】:
archive,另一个是shared object
标签: c unix compilation shared-libraries .a
归档库 (.a) 是静态链接的,即当您在 gcc 中使用 -c 选项编译程序时。所以,如果库有任何变化,你需要重新编译和构建你的代码。
.so(共享对象)优于 .a 库的优点是它们在运行时链接,即在 gcc 中创建 .o 文件 -o 选项之后。所以,如果 .so 文件有任何变化,你不需要重新编译你的主程序。 但请确保您的主程序使用 ln 命令链接到新的 .so 文件。
这将帮助您构建 .so 文件。 http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
【讨论】:
pic(位置无关代码)有关?
维基百科是该信息的不错来源。
要了解像 .a 这样的静态库文件,请阅读Static libarary
要了解共享库文件,如 .so,请阅读 Library_(computing)#Shared_libraries 在此页面上,文件命名部分也有有用的信息。
【讨论】:
它们用于链接阶段。 .a 文件是静态链接的,.so 文件是某种链接的,因此无论何时运行 exe 都需要该库。
您可以通过查看任何 lib 目录来找到它们的存储位置.../usr/lib 和 /lib 有大部分,还有 LIBRARY_PATH 环境变量。
【讨论】:
.a 文件通常是静态链接(或更准确地说是归档)的库,并且
.so 是动态链接库。
要进行移植,您将需要编译它们的源代码,或 AIX 机器上的等效文件。
【讨论】:
.a 是静态库。如果您使用存储在其中的代码,它会从它们中获取并嵌入到您自己的二进制文件中。在 Visual Studio 中,这些是 .lib 文件。
.so 是动态库。如果您使用存储在其中的代码,则不会将其嵌入到您自己的二进制文件中。相反,它只是被引用,因此二进制文件将依赖于它们,并且来自 so 文件的代码在运行时添加/加载。在 Visual Studio/Windows 中,这些是 .dll 文件(带有包含链接信息的小 .lib 文件)。
【讨论】:
.dll 的一个小的 .lib 文件称为导入库。