我目前正在尝试将C应用程序移植到AIX并且我感到困惑。什么是.a和.so文件以及它们在构建/运行应用程序时如何使用?
答案 0 :(得分:424)
归档库(.a)是静态链接的,即在gcc中使用-c选项编译程序时。因此,如果库中有任何更改,则需要再次编译和构建代码。
.so(共享对象)优于.a库的优点是它们在运行时链接,即在gcc中创建.o文件-o选项后链接。因此,如果.so文件中有任何更改,则无需重新编译主程序。 但请确保您的主程序使用ln命令链接到新的.so文件。
这将帮助您构建.so文件。 http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
希望这有帮助。
答案 1 :(得分:186)
.a是静态库。如果您使用存储在其中的代码,则从它们中获取并嵌入到您自己的二进制文件中。在Visual Studio中,这些将是.lib文件。
.so是动态库。如果您使用存储在其中的代码,则不会将其嵌入到您自己的二进制文件中。相反它只是被引用,所以二进制文件将取决于它们,并且so文件中的代码在运行时添加/加载。在Visual Studio / Windows中,这些文件将是.dll文件(包含链接信息的小.lib文件)。
答案 2 :(得分:10)
.a文件通常是静态链接(或更准确地存档)的库,以及
.so是动态链接库。
要做一个端口,你需要编译它们的源代码,或AIX机器上的等效文件。
答案 3 :(得分:8)
它们用于链接阶段。 .a
个文件是静态链接的,.so
个文件是排序链接的,因此每当运行exe时都需要库。
您可以通过查看任何lib目录找到它们的存储位置...... /usr/lib
和/lib
包含大多数目录,还有LIBRARY_PATH
环境变量。
答案 4 :(得分:1)
维基百科是此信息的合适来源。
要了解静态库文件,例如.a,请阅读Static libarary
要了解共享库文件,例如.so,请阅读Library_(computing)#Shared_libraries在此页面上,文件命名部分中也提供了有用的信息。