比如我需要生成一个共享库libXXX.so。
生成它的常用方法是什么?只使用 -fPIC -shared 吗?
我需要创建一个到这个库的软链接(soft link)吗?我的意思是使用 ln -s。
如果我更新共享库会怎样,即。从 libXXX.so.1.2.3 到 libXXX.so.1.2.4,我的项目怎么知道共享库更新了?我需要重新编译整个项目吗?
在 Makefile 中管理共享库的常用方法是什么?
我完全不明白这些问题。请帮我一个忙:-)
最佳答案
您提出问题的主题非常广泛。您的大部分问题取决于您的环境,是否创建软链接(soft link)取决于您将库保存在哪个文件夹中以及哪些进程可能需要访问它等。
请检查这个link &这个link还对创建和使用共享库进行了详细说明。
对您的问题的一些简短回答:
What's the common way to generate it? Only use -fPIC -shared ?
使用的选项取决于编译器。 fPIC 有助于生成与位置无关的代码,而 shared 使库成为共享库。但是,除此之外,还有一些选项可以仅公开您决定从库中导出的那些符号,以及在库的全局符号 (-symbolic) 等之间创建强链接的选项。
Do I need to create a soft link to this library? I mean using ln -s.
正如我上面提到的,这取决于您决定放置图书馆的位置。常见的机制是将您的库保存在您选择的某个文件夹中,并在通常“已知”或可访问的文件夹(如/usr/lib 等)中创建指向它的链接。
What if I update the shared libray, ie. from libXXX.so.1.2.3 to libXXX.so.1.2.4, how my project knows that the shared library is updated? Do I need to re-compile the whole project again?
共享库的主要优点之一是您可以更新最新版本而无需重新编译整个代码。同样,实现这一点取决于平台和编译器。
What's the common way to manage the shared library in Makefile?
google 中有无数链接,我的链接还提供了一些基本的详细信息。
关于c++ - 在 Linux 上管理共享库的常用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10812573/