Boost,bjam和符号链接

时间:2010-01-28 10:27:29

标签: c++ linux boost bjam

我用bjam生成了一些Boost库,我得到了很多符号链接。

对于date_time:

libboost_date_time-gcc41-MT-1_39.a

libboost_date_time-gcc41-mt-1_39.so - > libboost_date_time-gcc41-MT-1_39.so.1.39.0

libboost_date_time-gcc41-MT-1_39.so.1.39.0

libboost_date_time-gcc41-mt.a - > libboost_date_time-gcc41-MT-1_39.a

libboost_date_time-gcc41-mt.so - > libboost_date_time-gcc41-MT-1_39.so.1.39.0

为什么我不拿到.a和.so? 为什么这3个符号链接? 为什么原始文件的.so名称如此复杂,发布版本提到了两次?

不可能只有:

libboost_date_time-gcc41-MT-1_39.a libboost_date_time-gcc41-mt-1_39.so

感谢您的帮助。我不知道如何处理这些符号链接。

注意:我是Linux的新手。

2 个答案:

答案 0 :(得分:2)

我不知道任何特定的提升或bjam。

但是最后两个,如果你看到版本是独立的。因此,此.so或.a文件的任何使用者都可以将基本名称用于其目的。如果这些库的任何较新版本都可用,可以将其放在那里并只修改sym链接以指向新版本。通过这种方式,他们可以拥有两个版本,因此,如果任何人想要使用特定版本,他们可以直接使用它而不需要sym链接。不关心版本的人可以使用基本名称来获取最新版本!

我认为如果你在unix机器上安装不同版本的java,就会使用这种方式。至少,我记得在我的Ubuntu中看过它。我们为每个版本/更新的java都有单独的文件夹。你有另一个文件夹sym​​链接,它始终指向最新的jre版本文件夹。如果您在现有版本(特别是Linux中的rpm包)上安装不同的版本gcc,也可以看到这一点

答案 1 :(得分:1)

符号链接是在两个名称之间共享同一文件的一种方式。例如,如果A链接到B,则打开A或B将向调用程序提供相同的数据。

在这种情况下,您有2个文件libboost_date_time-gcc41-mt-1_39.so.1.39.0和libboost_date_time-gcc41-mt-1_39.a。 .so文件是共享库,.a是静态库。

没有版本号的链接libboost_date_time-gcc41-mt.so和libboost_date_time-gcc41-mt.a就是这样,那些不关心版本号的构建可以使用这些库。

对于共享库,有一个版本号的命名约定,以便完整版本号在最后,因此构建系统可以精确控制版本号。

请参阅Boost docs了解完整说明