clang ++ не может скомпилировать привет - PullRequest
0 голосов
/ 17 декабря 2018

Я установил clang в моей среде conda вместе с gcc.Их версии:

gcc     7.2.0
clang   7.0.0
libcxx  7.0.0

Затем я создал файл hello world src a.cpp

  1. Если я скомпилирую файл, используя clang++ a.cpp,Ошибка:

    a.cpp:1:10: fatal error: 'iostream' file not found
    #include <iostream>
             ^~~~~~~~~~
    1 error generated.
    
  2. При использовании clang++ a.cpp --stdlib=libstdc++ ошибка такая же

  3. При использовании clang++ a.cpp --stdlib=libc++ ошибка становится

    ~/conda/envs/test/bin/ld: cannot find crtbegin.o: No such file or directory
    ~/conda/envs/test/bin/ld: cannot find -lgcc
    clang-7: error: linker command failed with exit code 1 (use -v to see invocation)
    
  4. Использование clang++ a.cpp -I$HOME/conda/envs/test/include/c++/7.2.0

    In file included from a.cpp:1:
    /site/home/shliu/conda/envs/test/include/c++/7.2.0/iostream:38:10: fatal error: 'bits/c++config.h' file not found
    #include <bits/c++config.h>
             ^~~~~~~~~~~~~~~~~~
    1 error generated.
    

Я использую общий компьютер, поэтому не могу установить общесистемные компиляторы и файлы заголовков.

Вопросы:

  1. Что я должен сделать, чтобы это работало?
  2. Если clang не поставляется с собственными заголовочными файлами, и мне нужно использовать то, что предоставлено gcc, следует ли мне рассмотреть совместимость clang version и gcc version?
  3. Нужно ли устанавливать libc++ в той же среде conda, чтобы использовать clang++?

После некоторого теста я нашел способ сделать этов Конде, которая размещена в качестве ответа.Однако я до сих пор не понимаю, как работает clang, особенно его связь с gcc.Я был бы очень признателен, если бы кто-нибудь мог ответить (и я приму это как ответ на этот пост):

  1. Пересылает ли clang все задания на gcc, поэтому мы всегда нуждаемсяgcc цепочка инструментов, которая будет установлена ​​для использования clang?
  2. Я нашел папку включения для clang, которая равна $HOME/conda/envs/test/include/c++/v1 вместе с $HOME/conda/envs/test/include/c++/7.2.0, что из gcc.Но если было указано --gcc-toolchain, в папке v1 не производится поиск заголовков (что можно увидеть из вывода, добавив -v в компилятор. Тогда каково использование включаемых файлов v1?

1 Ответ

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

Наконец-то я нашел способ, который должен сделать

clang++ --gcc-toolchain=$HOME/conda/envs/test a.cpp

Это совсем не очевидно.

...