我正在使用cmake在Ubuntu 16.04上使用gcc构建它 当我运行此命令时,它会在list_dir函数内部导致分段错误异常。 我不知道为什么。 请帮忙。 任何帮助将不胜感激。
arraysEqual = (a1, a2) =>
a1.length === a2.length &&
a1.every((o, idx) => this.objectsEqual(o, a2[idx]));
objectsEqual = (o1, o2) =>
typeof o1 === "object" && Object.keys(o1).length > 0
? Object.keys(o1).length === Object.keys(o2).length &&
Object.keys(o1).every(p => this.objectsEqual(o1[p], o2[p]))
: o1 === o2;
更新:此行上的代码例外
#include <string>
#include <iostream>
#include <vector>
#include <filesystem>
namespace fs = std::filesystem;
static void list_dir(const std::string &path, bool recursive){
try{
std::vector<std::string> dirs;
try{
for (const auto &entry : fs::directory_iterator(path)){
std::cout << entry << "\n";
if(recursive && entry.is_directory() && !entry.is_symlink())
dirs.push_back(entry.path().string());
}
}
catch(const fs::filesystem_error &err){
std::cerr << "err: " << err.what() << "\n";
}
if(recursive){
for (const auto &p : dirs)
list_dir(p, true);
}
}
catch(const std::exception &err){
std::cerr << "err: " << err.what() << "\n";
}
}
int main (int argc, char *argv[]) {
if (argc != 2)
{
std::cerr << "Usage: index <dir>\n";
return 1;
}
list_dir(argv[1], true);
std::cout << "Done.\n";
return 0;
}
更新:如果有人感兴趣,这是cmake文件
for (const auto &entry : fs::directory_iterator(path))
答案 0 :(得分:1)
我只是解决了这个问题,没有链接到导致错误的文件系统库,尽管我不知道为什么没有正确的链接库仍可以编译代码...
在添加后,在cmake中:
target_link_libraries(${PROJECT_NAME} "-lstdc++fs")
现在一切正常。