我用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的新手。
发布于 2010-01-28 18:41:17
符号链接是在两个名称之间共享同一文件的一种方式。例如,如果A链接到B,则打开A或B将向调用程序提供相同的数据。
在本例中,您有两个文件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
发布于 2010-01-28 18:38:22
我不知道任何特定于boost或bjam的东西。
但是最后两个,如果你看到的话是独立于版本的。因此,此.so或.a文件的任何使用者都可以使用基本名称来实现它们的目的。如果有任何更新版本的库可用,可以将其放在那里,只需修改sym链接以指向新版本即可。通过这种方式,他们可以将两个版本都放在适当的位置,这样,如果任何人想要使用特定的版本,他们可以直接使用它,而不需要sym链接。那些不关心版本的人可以使用基本名称本身来获取最新版本!
我认为如果您在unix机器上安装不同版本的java,就会使用这种方法。至少,我记得我在我的Ubuntu上见过它。对于java的每个版本/更新,我们都有单独的文件夹。您有另一个文件夹sym链接,它总是指向最新的jre版本文件夹。如果您在现有版本(尤其是linux中的rpm包)的基础上安装了不同的版本,也可以看到这一点。
https://stackoverflow.com/questions/2153759
复制相似问题