【问题标题】:what is the difference between .so and .a files?.so 和 .a 文件有什么区别?
【发布时间】:2012-08-30 21:16:51
【问题描述】:

我正在尝试编译一个 3rd 方库(在 linux 上)并看到它正在生成 libsomething.a 文件我有我的其他库是 .so 文件

但似乎 .a 也是共享库,可以像 .so 库一样使用

那么这两者有什么区别吗?或者它们只是相同的命名约定。

【问题讨论】:

  • 是什么让你说它们可以以相同的方式使用?
  • @CarlNorum 因为可以链接到这两种类型 - 只是结果会有所不同。
  • @H2CO3,“可以像这样使用”的定义很弱,但我想我会买的......
  • @Carl Norum,如果我知道确切的区别,我就不会问这个问题。我知道 .so 是共享库,但在某处发现 .a 也是共享库,但我不知道它是静态库还是共享库
  • @CarlNorum 是的 - 事实上,“相同的方式”并不是真正的相同方式。

标签: linux shared-libraries


【解决方案1】:

.a 文件是静态库,而.so 文件是共享对象动态库,类似于 Windows 上的 DLL。 p>

.a 可以在编译期间作为程序的一部分包含,而.so 可以导入,而程序加载

【讨论】:

    【解决方案2】:

    但似乎 .a 也是共享库

    不,它是一个静态库。

    并且可以像.so lib一样使用

    如果您的意思是链接到它,那么是的。但是你不能 dlopen() 一个 .a 文件,你可以用一个 .so 文件来做。

    您可以随时向我们的老朋友Uncle G 解答您的问题。

    【讨论】:

    • 谢谢。这就是我感到困惑的地方。我的问题不在于链接它们。两者都可以联系起来。但我想知道 .a 是否只能动态或静态链接。现在清楚了
    • “G叔”的链接坏了。
    【解决方案3】:

    当您链接到*.a 时,库中的代码将包含在可执行文件本身中,并且可执行文件可以在不存在*.a 文件的情况下运行。当您链接到*.so 时,情况并非如此,*.so 文件必须在运行时存在。

    【讨论】:

      猜你喜欢
      • 2015-07-23
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2012-04-06
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多