Boost库名缺少版本标记

时间:2011-02-16 13:29:03

标签: c++ windows boost naming-conventions naming

我根据文档使用:

构建了boost

bjam.exe toolset=msvc-9.0 variant=release link=shared stage

这为我提供了文件夹阶段的所有库。我为每个boost包提供了3个文件,例如: boost_regex-vc90-mt-1_45.dll
boost_regex-vc90-mt-1_45.lib
boost_regex-vc90-mt.lib

什么是没有版本标签的lib文件? boost_regex-vc90-mt-1_45.lib和boost_regex-vc90-mt.lib有什么区别?

增强文档说明如下:
“扩展:根据操作系统的惯例确定。在大多数unix风格的平台上,扩展名分别为静态库(归档)和共享库的.a和.so。在Windows上,.dll表示共享库.lib表示静态或导入库。如果unix变体上的工具集支持,则添加完整版本扩展(例如“.so.1.34”)和指向库文件的符号链接,名称不带尾随版本号,将也被创造了。“
http://www.boost.org/doc/libs/1_45_0/more/getting_started/windows.html#library-naming

没有版本标签的文件是库文件的符号链接? Windows中的符号链接?我不明白。

1 个答案:

答案 0 :(得分:1)

我想这是Windows上的副本。构建脚本尝试像在unix上那样进行符号链接,但由于它在Windows上不受支持,因此它被定义为副本。

在unix上,您通常libboost_regex.so作为libboost_regex.so.1.45.0的符号链接。编译器查找libboost_regex.so,读取链接并将全名存储在二进制文件中,因此即使在libboost_regex.so.1.45.0时,动态链接器也会为该程序加载libboost_regex.so.1.46.0,但新程序已链接反对最新版本。构建脚本似乎试图尽可能地在Windows上模拟该行为。