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


当前回答

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

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

其他回答

.a文件是静态链接的,.so文件是某种链接的,因此无论何时运行exe都需要这个库。

你可以通过查看任意lib目录找到它们的存储位置…/usr/lib和/lib拥有其中的大部分,还有一个LIBRARY_PATH环境变量。

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

要进行移植,您需要编译它们的源代码,或者AIX机器上的等效文件。

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

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

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

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

要了解共享库文件,请阅读Library_(computing)#Shared_libraries在本页,在文件命名部分也有有用的信息。

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

.so(共享对象)相对于.a库的优点是,它们在运行时被链接,即在gcc中创建.o文件-o选项之后。所以,如果在. So文件中有任何变化,你不需要重新编译你的主程序。 但是要确保主程序用ln命令链接到新的.so文件。

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