我目前正在尝试将一个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)是静态链接的,即当你在gcc中使用-c选项编译程序时。因此,如果库中有任何变化,您需要重新编译和构建代码。
.so(共享对象)相对于.a库的优点是,它们在运行时被链接,即在gcc中创建.o文件-o选项之后。所以,如果在. So文件中有任何变化,你不需要重新编译你的主程序。 但是要确保主程序用ln命令链接到新的.so文件。
这将帮助您构建.so文件。 http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
维基百科是一个不错的信息来源。
要了解静态库文件,如.a阅读静态库
要了解共享库文件,请阅读Library_(computing)#Shared_libraries在本页,在文件命名部分也有有用的信息。
推荐文章
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用sh shell比较字符串
- 为什么函数指针定义可以使用任意数量的&号或星号* ?
- 什么是可重入函数?
- 如何在C中将数组初始化为0 ?
- Typedef定长数组
- 只列出UNIX中的目录
- 在C语言中通过引用传递
- sizeof(某个指针)总是等于4吗?
- 为什么星号在变量名之前,而不是在类型之后?
- 如何限制从grep返回的结果的数量?
- 何时使用内联函数,何时不使用它?
- 如何管道列表的文件返回的找到命令到猫查看所有文件
- 以相对于当前目录的路径递归地在Linux CLI中列出文件