форсировать ложные ошибки файловой системы (temp_directory_path возвращает ‹Bad Ptr›)

Я пытаюсь получить текущую временную папку с помощью 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;
}

При исследовании значения tmp_path во время сеанса отладки Visual Studio 2013 кажется, что значение tmp_path неверно — VS отображает {m_pathname=<Bad Ptr>}.

Следующий код также завершается ошибкой с исключением "слишком длинная строка", что может быть связано с проблемой:

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

Boost был перекомпилирован локально с помощью набора инструментов msvc:

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 Сборка 9600 x64
  • Visual Studio 2013, версия 12.0.30110.00, обновление 1

person Alex Netkachov    schedule 12.03.2014    source источник


Ответы (1)


Ошибка возникает из-за совпадения двух факторов:

  • Библиотеки boost подключаются динамически и без автозагрузки (BOOST_ALL_DYN_LINK;BOOST_ALL_NO_LIB)
  • связанные библиотеки Boost находятся в режиме выпуска, но проект находится в режиме отладки

Перекомпиляция boost с variant=release,debug, указание -gd- библиотек в свойствах компоновщика и добавление -gd- dll в путь решили проблему.

person Alex Netkachov    schedule 12.03.2014