我目前正在尝试将一个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在本页,在文件命名部分也有有用的信息。
推荐文章
- 在参数数量上重载宏
- 越界访问数组有多危险?
- 'for'循环中的后增量和前增量产生相同的输出
- 如何在父进程退出后使子进程死亡?
- 内存泄漏是否正常?
- Unix列表命令'ls'可以输出数值chmod权限吗?
- 在Unix中,我可以在一个目录中运行'make'而不首先cd'到该目录吗?
- 如何正确比较C中的字符串?
- 如何查看Linux共享库正在导出的函数列表?
- 为什么这个for循环在某些平台上退出,而在其他平台上不退出?
- 关闭vs关闭套接字?
- 快速unix命令显示文件中间的特定行?
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用sh shell比较字符串