Поиск iostream в Clang++: фатальная ошибка: файл iostream не найденC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Поиск iostream в Clang++: фатальная ошибка: файл iostream не найден

Сообщение Anonymous »

Я написал следующую простую программу на C++:

Код: Выделить всё

#include 

using namespace std;

int main() {
cout  7
В каждом из каталогов 5, 7 и v1 существует файл с именем iostream

Также в /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;
^
Напоминаем, Я буквально просто пытаюсь скомпилировать Hello, World

Я также пытался удалить и переустановить Clang с помощью следующей команды:

Код: Выделить всё

$> sudo apt-get purge --auto-remove clang
$> sudo apt-get update
$> sudo apt-get install clang
Это не имело никакого эффекта. Я использую Ubuntu 18.04 и понятия не имею, что не так и с чего начать, чтобы это исправить. Моя среда сборки находится в упадке.

Если возможно, я бы хотел, чтобы 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)
Я также попробовал sudo apt-get install lc++1 только для того, чтобы обнаружить, что это совершенно несвязанный пакет.

Обновление (3)

Я потратил еще несколько часов, пытаясь решить эту проблему, установив несколько пакетов, оба из apt и из исходного кода, пробовал разные версии различных инструментов, вручную копировал библиотеки из других источников и даже зашел в IRC Clang и напрямую поговорил с несколькими очень знающими разработчиками.

Никто не смог выяснить, что не так с моим ноутбуком, и ничего, что я сделал, не помогло.

К сожалению, через две недели у меня не будет этого ноутбука, поэтому мне, вероятно, придется закрыть эту проблему как «невозможно воспроизвести» - потому что, как только ноутбук исчезнет, у меня не будет возможности воспроизвести сломанную среду разработки.

Подробнее здесь: https://stackoverflow.com/questions/545 ... -not-found
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»