Boost库链接错误Visual C++

6

我下载了Launchy的源代码,并尝试在Visual Studio 2005中构建它。Launchy项目是使用VC7构建的,因此我必须将项目文件更新为VC8,这个过程似乎很顺利。但是,Launchy还使用Boost 1.33.1库,而我所构建的是Boost 1.41.0库(感谢Boost使最近的库更容易构建),因此我还更新了项目以指向我的新的Boost库安装位置。现在我得到以下链接器错误:

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib'

我查看了Boost库目录,最接近的匹配项是...
libboost_regex-vc80-mt-gd-1_41.lib

注意缺少的's'。我不明白库之间的区别,以及Visual Studio是否正在寻找错误的内容,或者我的Boost构建过程未能构建正确的库文件。有人可以指点我吗?
作为一个实验,我复制了我拥有的regex库,并将其重命名为链接器正在寻找的名称。这给了我一个长长的链接器错误列表,例如已经在msvcrtd.lib中定义的符号:
error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)

我会尝试构建Boost 1.33.1库,并将我的Launchy项目文件指向该库。但我仍想知道我的Boost 1.41.0库出了什么问题。

编辑:我在Boost文档中找到了一个参考链接 , 解释了's'库的含义:

当静态链接到C++标准库和编译器运行时支持库时,请使用此库。

所以看起来's'库是正确的选择,现在我只需要弄清如何构建它们。

解决方案:我能够使用以下命令行构建丢失的boost库。

bjam --build-type=complete msvc stage

我在 boost 所在的目录中运行了 boostrap.bat,然后再运行了这个命令。

如果您不想自己编译构建,可以在此处获取它们: http://boost.teeks99.com - teeks99
2个回答

10
差异在Boost文档中清楚地描述 - "mt-sgd"表示"调试,静态链接运行时库,多线程,带有调试符号"。"mt-gd"相同,但使用动态链接运行时库(即msvcrtd.lib而不是libcmtd.lib)。 要么更改项目设置以使用动态CRT链接(即/MDd而不是/MTd),要么使用静态链接构建Boost - 混合使用这些方法将无法正常工作。

3
你使用了哪个命令来构建boost?尝试指定build-type=complete。通常它也应该构建s libs。

我会尝试一下,谢谢。我想我是在没有指定构建类型的情况下构建它的。 - Parappa
它对我不起作用。s-库未构建。boost 1.54 - Max
1
这个选项为我生成了s-libraries:runtime-link=static。 - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接