【问题标题】:What are .a and .so files?什么是 .a 和 .so 文件?
【发布时间】:2012-04-06 05:49:54
【问题描述】:

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

【问题讨论】:

标签: c unix compilation shared-libraries .a


【解决方案1】:

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

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

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

【讨论】:

  • 这些是否与pic(位置无关代码)有关?
【解决方案2】:

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

要了解像 .a 这样的静态库文件,请阅读Static libarary

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

【讨论】:

    【解决方案3】:

    它们用于链接阶段。 .a 文件是静态链接的,.so 文件是某种链接的,因此无论何时运行 exe 都需要该库。

    您可以通过查看任何 lib 目录来找到它们的存储位置.../usr/lib/lib 有大部分,还有 LIBRARY_PATH 环境变量。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 如何构建我的应用程序以使用 .so 文件?
      • 有很多优秀的参考资料可用于构建这两种类型的库并在 Web 上链接到它们。 Google 是您的朋友。
      • @Dunc - 有几种方法。你有makefile吗?通常汇编整个程序(并因此调用链接器)的命令将使用 -L/dir/dir1/.../ 指定查找库文件的位置,也可以使用 -lname 显式命名库。您会发现实际名称是 libname.a 或 libname.so。然后,如果这是一个相当正常的程序,链接器可以弄清楚该怎么做。但是您仍然有制作或查找 .so 文件的问题。您是否有构建它的源代码或 AIX 库?
      【解决方案5】:

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

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

      【讨论】:

      • 您好,是否有任何选项可以在 c/c++ 代码中反编译 .so 文件?
      • .dll 的一个小的 .lib 文件称为导入库。
      • "。相反,它只是被引用",这是如何工作的——动态库中的代码不是必须加载到托管进程中吗?
      • @JoelBlun 是的,但仅在运行时,而不是在编译时。
      猜你喜欢
      • 2012-08-30
      • 2015-07-23
      • 2012-08-27
      • 2021-06-02
      • 2015-09-19
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多