我下载了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,然后再运行了这个命令。