2014-02-13 3 views
4

Я установил clang, чтобы сравнить его использование с g ++ (gcc) для некоторых программ на C++; как в, я сравнивал время компиляции, обратную связь с ошибкой и т. д. для тех же программ. Я сделал это в основном для официального учебника LLVM (реализация компилятора с использованием LLVM).Clang, LLVM и g ++

В какой-то момент мне нужно было установить библиотеки LLVM (v. 2.9.), А до того, как я только скачал clang. Вследствие этого компиляция с clang ++, похоже, не работает для следующего кода учебника; в то время как g ++ работает с директивами LLVM (например, 'llvm-config -libs` и т. д.). Одновременно с установкой библиотек мне пришлось также перейти от старого учебника, который я читал (llvm 2.2., Предлагая синтаксис clang ++), к одному для 3.0. (предполагая синтаксис g ++), поскольку изменения в библиотеке были изменены.

Мои вопросы объяснить изменения после загрузки LLVM LIBS:

(1) Когда я теперь типа «г ++», я до сих пор на самом деле работает с НКУ, или имеет LLVM/лязг установить себя в качестве новый по умолчанию имитирует синтаксис gcc? Если да, то как я могу убедиться, что я действительно использую gcc, а не clang, когда захочу?

(2) Если g ++ все еще является gcc, любые мнения/предположения, почему официальное руководство clang/llvm переключается с предложения о том, чтобы использовать свой собственный конкурирующий компилятор обратно в gcc? (С, например, here.)

Моя система:

Ubuntu 12,04.
llvm 2.9.
gcc 4.6.3.
clang 3.0.

+3

Можете ли вы попробовать запустить команды 'which g ++' и 'g ++ --version' –

+1

Насколько я знаю, clang ничего не делает с существующими исполняемыми файлами gcc. В учебном пособии LLVM вы можете использовать любой компилятор C++, поэтому я предполагаю, что они переключились на gcc, потому что ваш средний человек с большей вероятностью имеет gcc, чем они должны иметь clang. –

+0

@vonbrand: Я набрал 'llvm' в менеджере программного обеспечения. Появились библиотеки разработчиков, которые я установил. Где я могу это организовать, я предпочитаю интегрировать свои установки в программном mgr. – gnometorule

ответ

1

Для того, чтобы вводить g++ выполнить лязг компилятор, вы, вероятно, будет смотреть на либо символическую ссылку с именем g++ звенеть, ранее в вашем $PATH, чем путь к реальному g++, либо псевдоним с именем g++, по линиям alias g++='clang++'.

Вы можете проверить псевдоним (хотя я предполагаю, что это маловероятно), набрав alias g++, который даст вам знать, если у вас есть какие-либо псевдоним установить (и если да, то что)

Для того, чтобы изменить $PATH вопрос, если это произойдет, вам придется либо удалить символическую ссылку (кажется разумной, если вы хотите clang, вы можете просто ввести clang++ вместо g++) или изменить положение символической ссылки в переменной PATH, но так как они, вероятно, будут существовать в /usr/local/bin или что-то подобное, что тоже сделает символическую ссылку!

Учитывая это, вероятно, g++ все еще вызывает gcc g++ компилятор, а кто-то просто немного небрежно, печатая учебник - Я вижу только одно упоминание о g++ на странице вы связаны, в нижней части?

+0

Хорошие предложения, будет проверять тома. – gnometorule

+0

Последний абзац: это нечто большее. Если вы попытаетесь выполнить ту же команду с заменой g ++ на clang ++, вы получите ошибки в изобилии. Я предполагаю, что это не удивительно, поскольку, может быть, llvm-config предназначен для того, чтобы gcc мог выполнять llvm-код и библиотеки, и поэтому не имело бы смысла с clang? – gnometorule

+0

Бит, который я просматриваю, читает 'g ++ -g -O3 toy.cpp \' llvm-config --cppflags --ldflags --libs core \ '-o toy' - мое понимание здесь заключается в том, что прилагаемая команда в пределах '' '' '' меток будет выполняться оболочкой, а затем будет выполняться g ++ - например, вы можете попробовать 'g ++ \' echo '-I $ DIR_TO_INCLUDE' \ 'file.cpp -o EXE_FILE', и это будет включать ваш каталог. Я не могу себе представить, почему вывод 'llvm-config -cppflags -ldflags -libs core' должен передавать вещи, принятые в виде флагов, g ++, но не clang ++? Если есть некоторая небольшая разница в синтаксисе и т. Д. – chrisb2244

Смежные вопросы