Boost文件系统库无法在调试模式

时间:2017-10-10 17:53:44

标签: c++ boost boost-filesystem

我正在研究这个使用boost:filesystem库的小项目。问题是boost:filesystem:path似乎在调试模式下无法正常工作。每当我尝试创建一个传递std :: string的路径对象时,构造函数就会从此函数中抛出异常(std :: length_error)

template <class U> inline
void dispatch(const std::string& c, U& to, const codecvt_type& cvt)
{
  if (c.size())
  convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);
}

如果我在costructor中传递一个wstring而不是一个字符串,它可以正常工作。问题是当我尝试使用operator / overload来连接不同的路径时会抛出另一个异常,我没有从这个问题中找到任何解决方法。

当我发现项目的发布版本正常工作时,发生了最奇怪的事情。我在网上找到了另一个答案,表明问题可能是我导入了错误的boost库,但实际上我已经在调试模式下使用boost_filesystem-vc140-mt-gd-1_64.lib和boost_filesystem-vc140 -mt-1_64.lib,所以我不认为是这种情况。

知道问题可能是什么?

编辑我被问到一个最小的,完整的例子,我可以提供一个简单的例子,因为它是我用来验证问题存在的那个。如果我写一个简单的主要像:

#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/endian/arithmetic.hpp>
#include <iostream>


int main(int argc, char *argv[]){

std::string s1("C:/Programs");
std::string s2("Program.exe");

boost::filesystem::path path1(s1);
boost::filesystem::path path2(s2);

boost::filesystem::path definitivePath = path1 / path2;

std::cout << definitivePath;

return 0;
}

如果我在调试模式下构建它并尝试在调试器处于活动状态时运行它,则当我尝试构建路径对象时,会在main的第三行抛出异常。如果我使用

std::wstring s1(L"C:/Programs");
std::wstring s2(L"Program.exe");

相反构造函数正常工作,但我总是在倒数第二行上得到一个异常,当我尝试连接两个路径时​​(如果我在名称路径中使用\而不是/,也会发生这种情况)。

如果我在发布版本中运行应用程序,而不使用调试器,它可以正常工作(我可以说因为cout正确打印了连接路径)。

其他有用的信息:我使用最新版本的QT Creator作为IDE,在.pro文件中包含以下行以包含库(使用VS2015 x64构建,与我在QT Creator中使用的相同) :

win32{
    INCLUDEPATH += E:/pathToBoost
    DEPENDPATH += E:/pathToBoost/stage/lib
    LIBS += -LE:/pathToBoost/stage/lib -lboost_filesystem-vc140-mt-gd-1_64
    CONFIG( debug, debug|release ) {
        # debug
        LIBS += -LE:/pathToBoost/stage/lib -lboost_filesystem-vc140-mt-gd-1_64
    } else {
        # release
        LIBS += -LE:/pathToBoost/stage/lib-release/lib -lboost_filesystem-vc140-mt-1_64
    }

0 个答案:

没有答案