boost filesystem suprious errors(temp_directory_path返回<bad ptr =“”>)</bad>

时间:2014-03-12 15:22:12

标签: c++ windows boost boost-filesystem

我正在尝试使用Boost获取当前的临时文件夹:

boost::system::error_code error;
auto tmp_path = boost::filesystem::temp_directory_path(error);

if (boost::system::errc::success != error.value())
{
    std::cout << error.message() << std::endl;
}

在visual studio 2013调试会话期间调查tmp_path的值时,似乎tmp_path的值不正确 - VS显示{m_pathname=<Bad Ptr>}

以下代码也失败,异常“字符串太长”,这可能与问题有关:

std::string tmp_file_str("test");
boost::filesystem::path tmp_file(tmp_file_str);

使用msvc工具集在本地重新编译Boost:

cd boost-folder
bootstrap
.\b2 toolset=msvc-12.0 variant=release link=static,shared threading=multi --with-chrono --with-date_time --with-filesystem --with-system --with-thread --with-test

环境:

  • Windows 8.1版本6.3.9600 Build 9600 x64
  • Visual Studio 2013版本12.0.30110.00 Update 1

1 个答案:

答案 0 :(得分:1)

错误的发生是因为两个因素的巧合:

  • 动态链接的库,无需自动加载(BOOST_ALL_DYN_LINK; BOOST_ALL_NO_LIB)
  • 链接的boost库处于发布模式,但项目处于调试模式

使用variant=release,debug重新编译boost,在链接器属性中指定-gd-库并在路径中添加-gd- dll解决了问题。