将VS2013升级到VS2015 - 如何保持链接提升

时间:2016-03-31 13:36:58

标签: boost visual-studio-2013 linker visual-studio-2015

已经阅读过几十篇关于这个主题的帖子,但似乎没有任何内容符合我的问题。

所以,我已经升级了VS2013' VS2015'。

我的解决方案中有几十个项目使用boost作为附加库。 我也重新编译了提升。

编译我的项目时出现此错误。

LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc120-mt-s-1_55.lib'
当我为libboost_thread-vc120-mt-s-1_55.lib编译boost时,

lib VS2013曾经存在。但在编译VS2015的提升后,lib名称已更改为 libboost_thread-vc140-mt-s-1_55.lib(很棒)。

问题

为什么链接器会查找文件libboost_thread-vc120-mt-s-1_55.lib。它如何知道要链接的文件?

1 个答案:

答案 0 :(得分:0)

我在从VS2013转换到VS2015时遇到了完全相同的问题,同时将Boost版本从1.59更改为1.61。

经过两天的谷歌搜索,搜索和尝试不同的变种,我似乎最终得到了一个有效的解决方案,虽然我不知道为什么。

我使用VS2015 x86 Native Tools命令提示符编译了Boost(我完全相同的前四次尝试):

> "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
> .\bootstrap
> .\b2 install --prefix="<MY_BOOST_DIR>\msvc14" --buildtype=complete --build-dir="<MY_BOOST_DIR>\build" toolset=msvc-14.0 variant=release,debug link=shared -j4 --address-model=32

在此之后我尝试编译我非常简单的测试

#include <boost\filesystem.hpp>
#include <iostream>

int main()
{
    boost::filesystem::path rootpath = boost::filesystem::current_path();

    std::cout << rootpath.string() << std::endl;
    std::cin.ignore();
    return 0;
}

为include和lib dirs设置适当的Boost目录。虽然文件'libboost_filesystem-vc140-mt-gd-1_61.lib'可验证地位于lib文件夹中,但VS2015仍然抱怨它无法找到该文件。

作为最后一次随机戳,我将目标平台更改为x64,之后链接器错误更改为有关冲突的警告: 警告LNK4272:库机器类型'X86'与目标机器类型'x64'冲突...所以由于某种原因,现在VS能够找到该文件!之后将目标更改回X86导致工作配置,但没有任何改变。

有人可以解释/验证这个吗?这是否解决了你的情况,@ idanshmu?