提升lib链接器错误Visual C

我下载了 Launchy的源代码,并尝试在Visual Studio 2005中构建它.Update项目是使用VC7构建的,所以我必须将项目文件更新到VC8,这个过程似乎进展顺利.然而,Launchy也使用了 Boost 1.33.1库,而我构建的是Boost 1.41.0库(Boost使得更新的库更容易构建),所以我也更新了项目以指向我的新库提升库安装.现在我收到以下链接错误
Fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib'

我查看了Boost lib目录,我能找到的最接近的匹配是……

libboost_regex-vc80-mt-gd-1_41.lib

注意缺少的’s’.我不明白libs的区别是什么,以及Visual Studio是否正在寻找错误的东西,或者我的Boost构建过程是否无法构建正确的库.任何人都能指出我正确的方向吗?

作为一个实验,我制作了我所拥有的正则表达式lib的副本,并将其重命名链接器正在寻找的内容.这给了我很长的关于已经在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库有什么问题.

编辑:我找到了一个参考in the Boost docs到’s’的库:

Use this library when linking statically to the C++ standard library and compiler runtime support libraries.

所以看起来’s’的库是正确的.现在我只需要弄清楚如何构建它们.

解决方案:我能够使用以下命令行构建缺少的升级库.

bjam --build-type=complete msvc stage

我已经在升力生活的目录中运行了boostrap.bat之后运行了.

解决方法

区别是 clearly described in Boost docs – “mt-sgd”表示“调试,静态链接的运行时库,多线程,带调试符号”. “mt-gd”是相同的,但使用动态链接的运行时库(即msvcrtd.lib而不是libcmtd.lib).

更改项目设置以使用动态CRT链接(即/ MDd而不是/ MTd),或使用静态链接构建Boost – 混合这些将无法正常工作.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...