Вопрос
Как сделать так, чтобы [моя пользовательская установка] clang смотрела в нужное место для заголовков C ++ (т.е. моя пользовательская установка gcc)?
Система
В настоящее время я работаю на компьютере RHEL 6 со всеми библиотеками по умолчанию.
В несистемном каталоге я [успешно]скомпилированные mpc, mpfr, gmp, cmake, python, gcc (4.9.3 и 8.1.0) и clang (5.0.0 с использованием gcc 4.9.3 и 6.0.0 с использованием gcc 8.1.0).
gcc был сконфигурирован с --prefix=... --with-gmp=... --with-mpfr=... --with-mpc=... --disable-multilib
bin каталоги gcc (и все его зависимости) были добавлены в PATH
, его каталоги lib / lib64 добавлены в LD_LIBRARY_PATH
, а CC / CXX установлен в [my] gcc / g ++ соответственно.
Тогда clang был настроен на cmake ../llvm -DCMAKE_INSTALL_PREFIX=... -DCMAKE_BUILD_TYPE=Release -DLLDB_DISABLE_LIBEDIT=True -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX}
.Обратите внимание, что я установил CMAKE_C_COMPILER / CMAKE_CXX_COMPILER, хотя мне и не нужно было этого делать, потому что какой-то другой SO-ответ сказал, что они это исправили, и я подумал, что, может быть, происходит что-то странное, но это не исправило.
Проблема
Если я скомпилирую этот тестовый файл:
#include <atomic>
int main ( int , char const** )
{
std::atomic<int> i (0) ;
i.fetch_add ( 2 ) ;
return 0 ;
}
Я получу такой результат:
[redacted]~/Temporary% g++ -std=c++11 main.cpp
[redacted]~/Temporary% clang++ -std=c++11 main.cpp
main.cpp:2:10: fatal error: 'atomic' file not found
#include <atomic>
^~~~~~~~
1 error generated.
В некотором другом кодеЯ больше включаю пути, которые дают больше информации о проблеме.Один из них #include <mutex>
, который выдает эту ошибку:
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/mutex:45:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/system_error:163:28: error: incompatible operand types ('void (*)()' and 'bool')
{ return _M_value != 0 ? &__not_bool_type : false; }
, который ясно показывает, что он идет на встроенные заголовки, а не те, которые [я проверял], являются частью установки gcc 8.1.0.
Другие заметки
Я видел, что есть опция --gnu-toolchain
для configure
(по состоянию на 2012 г.), но она, кажется, отсутствует втекущие версии.Я полагаю, что видел такую же опцию во время выполнения, но требование к пользователям (когда они уже что-то поставили для замены всей своей системы компилятора) не является приемлемым решением.