我在我们的教师服务器上运行我的 C++ 项目时遇到问题。我得到的运行时错误是这样的:
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Aborted (core dumped)
我确定问题出在这个文件系统迭代器的某个地方(通过使用测试程序):
bf::path dir("ImageData/" + m_object_type);
vector<bf::path> tmp;
copy(bf::directory_iterator(dir), bf::directory_iterator(), back_inserter(tmp));
sort(tmp.begin(), tmp.end());
for (vector<bf::path>::const_iterator it(tmp.begin()); it != tmp.end(); ++it)
{
auto name = *it;
image_names.push_back(name.string());
}
该程序在另外两个基于 Linux 的系统上完美运行(kubuntu 和 linux mint,但由于我的项目运行时非常繁重,并且在我的机器上使用不同的参数运行它大约需要 28 天,我真的想使用服务器)。我已经尝试了各种路径,但都没有奏效。我读到了一个在 1.47 之前导致这个错误的 boost 错误,但我在服务器上使用的是 1.54。我还检查了系统语言环境,但这并没有真正给我任何线索,因为它们几乎与我的系统相似。服务器的其他规格是:
Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-generic x86_64) g/c++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
如果有人有任何想法可以分享,我将不胜感激。