unix 什么是.a和.so文件?

goqiplq2  于 11个月前  发布在  Unix
关注(0)|答案(5)|浏览(207)

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

cnh2zyt3

cnh2zyt31#

归档库(.a)是静态链接的,即当你在gcc中使用-c选项编译程序时。所以,如果库中有任何变化,你需要重新编译和构建代码。
.so(共享对象)相对于.a库的优点是它们在运行时被链接,即在gcc中创建.o文件-o选项之后。因此,如果.so文件中有任何更改,您不需要重新编译主程序。但请确保您的主程序通过ln命令链接到新的.so文件。
这将帮助您构建.so文件。http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

yizd12fk

yizd12fk2#

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

wfsdck30

wfsdck303#

.a文件通常是静态链接的库(或者更准确地说是存档),
.so是动态链接库。
要进行移植,您将需要为进行移植而编译的源代码,或者AIX机器上的等效文件。

gg58donl

gg58donl4#

它们用于链接阶段。.a文件是静态链接的,而.so文件是某种链接的,因此无论何时运行exe都需要该库。
你可以通过查看任何一个lib目录找到它们的存储位置...... /usr/lib/lib拥有它们中的大部分,还有LIBRARY_PATH环境变量。

nzrxty8p

nzrxty8p5#

维基百科是一个不错的信息来源。
要了解静态库文件(如.a),请阅读Static libarary
要了解共享库文件,如.so,请阅读Library_(computing)#Shared_libraries在此页面上,文件命名部分也提供了有用的信息。

相关问题