Код: Выделить всё
#include
using namespace std;
int main() {
cout 7
Также в /usr/include/x86_64-linux-gnu существует каталог c++, который выглядит точно так же (с 5, 7, 5.5.0 и 7.3.0).
Также в /usr/include существует каталог c++, который выглядит точно так же, как два выше.
Я не уверен, как моя среда разработки превратилась в такой беспорядок, но на данный момент мне просто хотелось бы знать, как это исправить это для того, чтобы Clang++ успешно нашел один из этих 9 экземпляров iostream вместо того, чтобы выдавать ошибку о том, что он не существует. Нужно ли мне добавлять переменную среды, чтобы сообщить Clang, где искать? Нужно ли мне передавать параметр командной строки, чтобы Clang выполнял рекурсивный поиск?
Обновление (1)
Когда я пытаюсь выполнить сборку с помощью libc++, я получаю следующую ошибку:
Код: Выделить всё
$> clang++ -stdlib=libc++ main.cpp
/usr/bin/ld: cannot find -lc++abi
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Код: Выделить всё
$> clang++ -isystem /usr/include/c++/7 -isystem /usr/include/x86_64-linux-gnu/c++/7 main.cpp
/usr/bin/ld: cannot find -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Код: Выделить всё
$> clang++ -isystem /usr/include/c++/7 -isystem /usr/include/x86_64-linux-gnu/c++/7 -stdlib=libc++ main.cpp
In file included from main.cpp:1:
In file included from /usr/include/c++/7/iostream:39:
In file included from /usr/include/c++/7/ostream:38:
In file included from /usr/include/c++/7/ios:42:
In file included from /usr/include/c++/7/bits/ios_base.h:41:
In file included from /usr/include/c++/7/bits/locale_classes.h:40:
In file included from /usr/include/c++/7/string:52:
In file included from /usr/include/c++/7/bits/basic_string.h:6352:
In file included from /usr/include/c++/7/ext/string_conversions.h:41:
In file included from /usr/include/c++/7/cstdlib:77:
/usr/include/c++/7/bits/std_abs.h:56:3: error: declaration conflicts with target of using declaration already in scope
abs(long __i) { return __builtin_labs(__i); }
^
/usr/include/c++/v1/stdlib.h:111:44: note: target of using declaration
inline _LIBCPP_INLINE_VISIBILITY long abs( long __x) _NOEXCEPT {return labs(__x);}
^
/usr/include/c++/7/bits/std_abs.h:52:11: note: using declaration
using ::abs;
^
/usr/include/c++/7/bits/std_abs.h:61:3: error: declaration conflicts with target of using declaration already in scope
abs(long long __x) { return __builtin_llabs (__x); }
^
/usr/include/c++/v1/stdlib.h:113:44: note: target of using declaration
inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) _NOEXCEPT {return llabs(__x);}
^
/usr/include/c++/7/bits/std_abs.h:52:11: note: using declaration
using ::abs;
^
In file included from main.cpp:1:
In file included from /usr/include/c++/7/iostream:39:
In file included from /usr/include/c++/7/ostream:38:
In file included from /usr/include/c++/7/ios:42:
In file included from /usr/include/c++/7/bits/ios_base.h:41:
In file included from /usr/include/c++/7/bits/locale_classes.h:40:
In file included from /usr/include/c++/7/string:52:
In file included from /usr/include/c++/7/bits/basic_string.h:6352:
In file included from /usr/include/c++/7/ext/string_conversions.h:41:
/usr/include/c++/7/cstdlib:177:3: error: declaration conflicts with target of using declaration already in scope
div(long __i, long __j) { return ldiv(__i, __j); }
^
/usr/include/c++/v1/stdlib.h:116:42: note: target of using declaration
inline _LIBCPP_INLINE_VISIBILITY ldiv_t div( long __x, long __y) _NOEXCEPT {return ldiv(__x, __y);}
^
/usr/include/c++/7/cstdlib:145:11: note: using declaration
using ::div;
^
Я также пытался удалить и переустановить Clang с помощью следующей команды:
Код: Выделить всё
$> sudo apt-get purge --auto-remove clang
$> sudo apt-get update
$> sudo apt-get install clang
Если возможно, я бы хотел, чтобы Clang работал, а не возвращался к использованию G++, поскольку моя IDE, похоже, автоматически обнаруживает Clang и использует его для проверки синтаксиса. Это означает, что каждая написанная мной программа на C++ имеет одну фатальную ошибку в первой строке («iostream не найден»), а остальная часть файла не проверяется, потому что первая является фатальной ошибкой.
Обновление (2)
Я безуспешно пытался установить еще несколько пакетов из репозитория Ubuntu apt:
Код: Выделить всё
$> sudo apt-get install libc++1 libc++1-9 libc++abi1 libc++abi1-9 llvm-9 llvm-9-dev
$> clang++ -isystem /usr/include/c++/7 -isystem /usr/include/x86_64-linux-gnu/c++/7 -stdlib=libc++ main.cpp
/usr/bin/ld: cannot find -lc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Обновление (3)
Я потратил еще несколько часов, пытаясь решить эту проблему, установив несколько пакетов, оба из apt и из исходного кода, пробовал разные версии различных инструментов, вручную копировал библиотеки из других источников и даже зашел в IRC Clang и напрямую поговорил с несколькими очень знающими разработчиками.
Никто не смог выяснить, что не так с моим ноутбуком, и ничего, что я сделал, не помогло.
К сожалению, через две недели у меня не будет этого ноутбука, поэтому мне, вероятно, придется закрыть эту проблему как «невозможно воспроизвести» - потому что, как только ноутбук исчезнет, у меня не будет возможности воспроизвести сломанную среду разработки.
Подробнее здесь: https://stackoverflow.com/questions/545 ... -not-found
Мобильная версия