【问题标题】:What's the common way to manage shared libraries on Linux?在 Linux 上管理共享库的常用方法是什么?
【发布时间】:2012-05-30 08:24:05
【问题描述】:

例如,我需要生成一个共享库,libXXX.so。

  1. 生成它的常用方法是什么?只使用 -fPIC -shared 吗?

  2. 我是否需要创建指向该库的软链接?我的意思是使用 ln -s。

  3. 如果我更新共享库会怎样,即。从libXXX.so.1.2.3到libXXX.so.1.2.4,我的项目怎么知道共享库更新了?我需要重新编译整个项目吗?

  4. Makefile中管理共享库的常用方法是什么?

我完全不明白这些问题。请帮我一个忙:-)

【问题讨论】:

  • 除了您提到的几点之外,共享库选项可能取决于平台,因此需要考虑其他因素。
  • 基本上,我关心的是Linux-x86平台。
  • 好的,所以也许你应该把它放在问题中,因为这样可以简化你可能得到的答案。你也可以添加一个linux标签。
  • ThisThis 是 Linux 上共享库的好资源。

标签: c++ c linux open-source shared-libraries


【解决方案1】:

您提出问题的主题非常广泛。您的大多数问题取决于您的环境,是否创建软链接取决于您将库保存在哪个文件夹中以及可能需要哪些进程访问它等。

请查看此link 和此link,其中还提供了有关创建和使用共享库的详细说明。

对您的问题的一些简短回答:

生成它的常用方法是什么?只使用 -fPIC -shared 吗?

使用的选项取决于编译器。 fPIC 有助于生成与位置无关的代码,并且 shared 使库成为共享库。但是,除此之外,还有一些选项可以仅公开您决定从库中导出的那些符号,以及在库的全局符号(-symbolic)等之间创建强链接的选项。

我需要创建一个指向这个库的软链接吗?我的意思是使用 ln -s。

正如我上面提到的,这取决于您决定放置库的位置。常见的机制是将您的库保存在您选择的某个文件夹中,并在通常“已知”或可访问的文件夹(如 /usr/lib 等)中创建指向它的链接。

如果我更新共享库怎么办,即。从 libXXX.so.1.2.3 到 libXXX.so.1.2.4,我的项目怎么知道共享库是 更新?我需要重新编译整个项目吗?

共享库的主要优点之一是您可以更新最新版本而无需重新编译整个代码。再次实现这一点取决于平台和编译器。

Makefile中管理共享库的常用方法是什么?

谷歌中有无数的链接,我的链接也提供了一些基本的细节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多