clang y clang ++ no se encuentran después de instalar el paquete clang-3.5

26

Después de instalar el clang-3.5paquete, escribir clango clang++en la línea de comando me da un mensaje que indica en qué paquetes se pueden encontrar esos programas. Intentando ejecutar la instalación clang-3.5nuevamente, apt indica que ya está instalado y en la última versión.

La instalación original se realizó con el comando:

sudo apt-get install clang-3.5 llvm

build-essential fue instalado previamente.

¿Alguna idea sobre lo que pudo haber sucedido?

Dr. Espátula
fuente

Respuestas:

30

Está allí, pero todavía se llama clang-3.5.

Puede ejecutarlo como clang-3.5(o clang++-3.5) o configurar un enlace simbólico como lo hice yo (la instalación de un sonido regular no funcionó):

sudo ln -s /usr/bin/clang-3.5 /usr/bin/clang
sudo ln -s /usr/bin/clang++-3.5 /usr/bin/clang++

Fea solución, tal vez; pero al menos funciona por ahora :)

Johan Wendin
fuente
Para clang-6.0, tengo que hacer esto además:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri
12

La forma correcta de usar el sonido metálico como predeterminado ccyc++ es usar update-alternatives:

Es posible que varios programas que cumplen las mismas funciones o funciones similares se instalen en un solo sistema al mismo tiempo. Por ejemplo, muchos sistemas tienen varios editores de texto instalados a la vez. Esto permite elegir a los usuarios de un sistema, lo que permite que cada uno use un editor diferente, si lo desea, pero dificulta que un programa elija un buen editor para invocar si el usuario no ha especificado una preferencia particular.

así que primero necesita agregar clang-3.5o clang++-3.5como alternativas a, por ejemplo, gccyg++ :

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-3.5 100
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-3.5 100

Si en algún momento necesita volver a cambiar gcco g++puede usar la --configopción:

sudo update-alternatives --config c++
Yan Foto
fuente
¿Podría agregar alguna explicación adicional con respecto a los argumentos? ¿Por qué cc/ c++entre los dos caminos? ¿Qué es eso 100al final? ¿Prioridad?
helmesjo
Echa un vistazo a los update-alternativesdocumentos. Creo que tienen mejores explicaciones que cualquier cosa que resumiría aquí.
Yan Foto
5

En Ubuntu 15.04 también puede instalar el paquete clang junto con el paquete clang-xx. Luego puede escribir clang ++ y se debe encontrar el ejecutable correspondiente.

sudo apt-get install clang
tisch
fuente
¿"Apt-get install clang" no instalaría simplemente la última versión y luego la usaría? Si el OP está instalando v3.5, no quiere usar la última.
amfcosta
4

Agregando a la respuesta de Yan Foto (y en caso de que su objetivo sea obtener un uso clangpero no necesariamente usarlo como cc), puede agregar todo el conjunto de programas de una sola vez usando

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 380 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 \
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-3.8 \
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-3.8 \
--slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-3.8

(Tenga en cuenta que el conjunto de binarios que vienen con cada versión de clang puede diferir, por ejemplo, 3.6 tiene clang-tblgen , 3.8 no.)

Si repites esto para cada versión de clang que instales, podrás cambiar entre ellas usando solo una update-alternatives comando.

(Mientras tanto, aparentemente, todavía hay un debate en curso sobre si incluir estos enlaces con los paquetes de Ubuntu o no: https://bugs.launchpad.net/ubuntu/+source/llvm-3.1/+bug/991493 )

Latanius
fuente
0

Cree un archivo .bashrc en su directorio de inicio. Escriba esta línea de código.

alias clang ++ = "clang ++ - 3.5"

Cierra tu terminal. Ábrelo de nuevo. Luego intente compilar su programa nuevamente.

Por lo que puedo decir, clang no funcionará a menos que indique la versión en el nombre del comando "clang ++ - 3.5". Así que alias el nombre en mi archivo .bashrc. Entonces solo tengo que escribir "clang ++".

Por cierto, descargué clang 3.5, así que ajusta los consejos anteriores a tu versión.

Digipen
fuente
0

Si tiene clang correctamente instalado, otra forma muy fácil de ahorrarle la molestia de escribir el número de versión junto con el nombre del programa es usar la función de autocompletar, por ejemplo (tener clang ++ - 3.5 instalado):

clang+[TAB][ENTER]

Entonces solo tienes que escribir clang+, presionar Taby Enter. Funciona de la misma manera con los nombres de directorios, nombres de archivos, etc. (Sin embargo, esto no lo ayudará si tiene instalada más de una versión de un programa).

smay
fuente
0

Esto debería establecer las alternativas de actualización para clang- 4.0 si clang- 3.8 (como en Ubuntu 16.04) está instalado:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-4.0 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-4.0 100
sudo update-alternatives --install /usr/bin/clang-apply-replacements clang-apply-replacements /usr/bin/clang-apply-replacements-4.0 100
sudo update-alternatives --install /usr/bin/clang-check clang-check /usr/bin/clang-check-4.0 100
sudo update-alternatives --install /usr/bin/clang-query clang-query /usr/bin/clang-query-4.0 100
sudo update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-4.0 100
sudo update-alternatives --install /usr/bin/scan-build scan-build /usr/bin/scan-build-4.0 100
sudo update-alternatives --install /usr/bin/scan-view scan-view /usr/bin/scan-view-4.0 100
Bl00dh0und
fuente
0

Agregando a la respuesta de Johann Wendin sobre simbología. En una cáscara de raíz puede vincular todas las diversas herramientas de sonido a la vez:

p.ej

find /usr/bin/ -name clang*  | sed -E 's/^(\/usr\/bin\/.*)(\-[0-9]*)$/ln -s -v \1\2 \1/' | xargs -d '\n' -n 1 bash -c

y luego repite para:

llc-*
lld-*
lldb-*
llvm-*

Entonces todo debería estar vinculado, no solo una pequeña selección. (Tal vez todavía olvidé algo).

Esto encontrará todos los archivos de acuerdo con el patrón en / usr / bin, eliminará los números finales (-8 o -9 o incluso -10) y luego creará enlaces simbólicos en cada uno.

CodeMonkey
fuente