Неопределенная ошибка ссылки с новой библиотекой файловой системы и clang ++ 7 - PullRequest
0 голосов
/ 17 декабря 2018

Я пытался выдать новую библиотеку filesystem STL, но по какой-то причине я получаю ошибки.Веб-сайт Clang++7 указывает, что он должен поддерживать новую библиотеку filesystem - на самом деле clang опережает g++ Я считаю.

Я использовал некоторый код из другого поста Stack Exchange, поэтому он долженбыть действительным в зависимости от количества голосов.Это может пойти в указанный каталог и распечатать все файлы в этом каталоге.Вот код.

#include <iostream>
#include <string>
#include <experimental/filesystem>

namespace fs = std::experimental::filesystem;

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

    std::string path = "/home/.../Downloads";
    for (const auto & entry : fs::directory_iterator(path))
    {
        std::cout << entry.path() << std::endl;
    }

}

Сообщения об ошибках, которые я получаю:

CMakeFiles/filesystem_app.dir/main.cpp.o: In function `main':
/media/.../clangcpp/filesystem_app/main.cpp:13: undefined reference to `std::experimental::filesystem::v1::__cxx11::directory_iterator::operator*() const'
/media/.../clangcpp/filesystem_app/main.cpp:13: undefined reference to `std::experimental::filesystem::v1::__cxx11::directory_iterator::operator++()'
CMakeFiles/filesystem_app.dir/main.cpp.o: In function `path<std::__cxx11::basic_string<char>, std::experimental::filesystem::v1::__cxx11::path>':
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.5.0/../../../../include/c++/5.5.0/experimental/fs_path.h:198: undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
CMakeFiles/filesystem_app.dir/main.cpp.o: In function `directory_iterator':
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.5.0/../../../../include/c++/5.5.0/experimental/fs_dir.h:188: undefined reference to `std::experimental::filesystem::v1::__cxx11::directory_iterator::directory_iterator(std::experimental::filesystem::v1::__cxx11::path const&, std::experimental::filesystem::v1::directory_options, std::error_code*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я убедился, что включил заголовок experimental/filesystem вместо просто filesystem, который удалял всекрасные закорючки в Клионе.Я пытался скомпилировать как из CLion, так и из командной строки.Строка компиляции, которую я использовал, была:

  clang++-7 -Wall -std=c++17 main.cpp -o app

У кого-нибудь есть чувство, что здесь не так?В сообщениях об ошибках компиляции я вижу ссылку на std::experimental::filesystem::v1::__cxx11::.., и мне интересно, почему это не говорит cxx17, но я не был уверен, что это было причиной проблемы.Я явно указал c++17 в строке компиляции выше.

1 Ответ

0 голосов
/ 17 декабря 2018

filesystem все еще экспериментален и требует дополнительной библиотеки.

Если вы используете libstdc ++, свяжите с -lstdc++fs (или target_link_libraries(${PROJECT_NAME} stdc++fs)).

Для libc ++ используйте -lc++fs (аналогично команде CMake).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...