0

我用 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 的新手。

4

2 回答 2

2

我不知道任何特定于 boost 或 bjam 的东西。

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

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

于 2010-01-28T10:38:22.097 回答
2

符号链接是在两个名称之间共享同一文件的一种方式。例如,如果 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 文档

于 2010-01-28T10:41:16.570 回答