Cómo instalar binarios pregrabados clang ubuntu 12.04
llvm (2)
En lugar de instalarlo manualmente, puede usar el repositorio de LLVM
, agregarlo a sus fuentes de apt
e instalarlo a través de apt-get
o del administrador de paquetes de Ubuntu. Ver LLVM apt repo sobre cómo hacerlo.
Haga los pasos como está escrito en el párrafo Instalar , en una terminal:
sudo wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get install clang-3.4 lldb-3.4
Soy muy nuevo en Linux, y no sé dónde tengo que poner los binarios pregenerados de Clang http://llvm.org/releases/download.html#3.3 . Lo descargo, desempaquelo con el mouse y agrego la ruta a / bin a mi $ PATH, y la ruta a / lib a $ LD_LIBRARY_PATH, y agrego * .conf con ruta a my / lib a /etc/ld.so.conf.d . Incluso reinicio mi portátil.
... pero todavía no puedo construir mi programa simple con Code :: Blocks GCC (error: /home/aadgrand/tmp/LLVM-3.3/final/llvm.src/lib/Support/Signals.cpp - referencia indefinida a `dladdr '' ) Texto del programa de prueba:
#include <iostream>
#include "llvm/IR/Module.h"
#include "llvm/IR/LLVMContext.h"
using namespace std;
int main()
{
llvm::LLVMContext &c = llvm::getGlobalContext(); // error line
cout << "Never printed" << endl;
return 0;
}
¿Qué más tengo que hacer? Tal vez necesito usar * .sig-file? ¿Hm?
¿La misma pregunta que cómo instalar CLang usando binarios precompilados? . Perdón por repetir, pero es realmente muy interesante e importante.
===== ACTUALIZADO ======
Acabo de aislar llvm-3.1, el mismo error que con llvm-3.4 (de los binarios precompilados):
-------------- Build: Debug in test2 ---------------
Compiling: main.cpp
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion=''Ubuntu/Linaro 4.6.3-1ubuntu5'' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
COLLECT_GCC_OPTIONS=''-std=c++98'' ''-pg'' ''-g'' ''-v'' ''-Wall'' ''-fexceptions'' ''-I'' ''/usr/lib/llvm-3.1/include'' ''-c'' ''-o'' ''obj/Debug/main.o'' ''-shared-libgcc'' ''-mtune=generic'' ''-march=x86-64''
/usr/lib/gcc/x86_64-linux-gnu/4.6/cc1plus -quiet -v -I /usr/lib/llvm-3.1/include -imultilib . -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /home/kpdev/projects/test2/test2/main.cpp -quiet -dumpbase main.cpp -mtune=generic -march=x86-64 -auxbase-strip obj/Debug/main.o -g -Wall -std=c++98 -version -p -fexceptions -fstack-protector -o /tmp/ccbKoBDJ.s
GNU C++ (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (x86_64-linux-gnu)
compiled by GNU C version 4.6.3, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/llvm-3.1/include
/usr/include/c++/4.6
/usr/include/c++/4.6/x86_64-linux-gnu/.
/usr/include/c++/4.6/backward
/usr/lib/gcc/x86_64-linux-gnu/4.6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
GNU C++ (Ubuntu/Linaro 4.6.3-1ubuntu5) version 4.6.3 (x86_64-linux-gnu)
compiled by GNU C version 4.6.3, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 65b5171ac1bd7b3f07dbea6bdb24be3d
/home/kpdev/projects/test2/test2/main.cpp: In function ‘int main()’:
/home/kpdev/projects/test2/test2/main.cpp:11:24: warning: unused variable ‘c’ [-Wunused-variable]
COLLECT_GCC_OPTIONS=''-std=c++98'' ''-pg'' ''-g'' ''-v'' ''-Wall'' ''-fexceptions'' ''-I'' ''/usr/lib/llvm-3.1/include'' ''-c'' ''-o'' ''obj/Debug/main.o'' ''-shared-libgcc'' ''-mtune=generic'' ''-march=x86-64''
as --64 -o obj/Debug/main.o /tmp/ccbKoBDJ.s
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS=''-std=c++98'' ''-pg'' ''-g'' ''-v'' ''-Wall'' ''-fexceptions'' ''-I'' ''/usr/lib/llvm-3.1/include'' ''-c'' ''-o'' ''obj/Debug/main.o'' ''-shared-libgcc'' ''-mtune=generic'' ''-march=x86-64''
Linking console executable: bin/Debug/test2
/usr/lib/llvm-3.1/lib/libLLVMSupport.a(Signals.o): In function `PrintStackTrace(void*)'':
(.text+0x6c): undefined reference to `dladdr''
/usr/lib/llvm-3.1/lib/libLLVMSupport.a(Signals.o): In function `PrintStackTrace(void*)'':
(.text+0x187): undefined reference to `dladdr''
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 1 warnings
||=== Build finished: 2 errors, 1 warnings ===|
El título de tu pregunta me ha engañado tanto a mí como a Atropo. Parecía como si quisiera instalar el compilador C ++ de clang y construir un programa llvm C ++ con él en Code :: Blocks.
Lo que realmente intenta hacer es instalar clang + llvm (en realidad son cosas diferentes) y crear un programa llvm con GCC en Code :: blocks. Dijiste "Code :: Blocks GCC", pero supuse que solo significaba "Tenía Code :: Blocks configurado con GCC y ahora quiero usar clang". Sin embargo, el registro de compilación C :: B que ha agregado muestra que está compilando con GCC.
Dado que está construyendo su programa llvm con GCC, no está claro por qué desea instalar el compilador clang. Quizás desee utilizar clang pero no sabe que Code :: Blocks puede soportar el compilador de clang, o no sabe cómo configurar C :: B para usar clang. Pero tomemos una cosa a la vez. Puedes construir este programa llvm con gcc si solo tienes las cosas configuradas correctamente. Y , un problema aparte, puede instalar clang correctamente. Y, otro problema por separado, puede configurar C :: B para compilar con clang si lo desea.
Atropo pegó comandos para instalar el último clang y su depurador lldb. Pero clang no necesita todas las bibliotecas de llvm e instalar solo clang e lldb no le proporciona todas las bibliotecas que necesita para construir su programa de llvm.
En uno de sus comentarios, dijo que había podido construir su programa con clang ++ en una terminal. Eso sugiere que tenía, en ese punto, una instalación manual de trabajo de clang y llvm. Pero no sé si todavía tiene uno después de la confusión y, de todos modos, estoy de acuerdo con Atropo en que la instalación manual de dicho software complejo, que personaliza su PATH
y LD_LIBRARY_PATH
etc., es mucho menos sensato que una instalación administrada desde un paquete repoository, dejando que el administrador del paquete haga las cosas bien.
Primero, construyamos su programa llvm con gcc en C :: B, y para eso, comience con algunos pasos de precaución que pueden o no ser necesarios:
Deshaga toda la personalización que hizo y elimine u oculte sus binarios clang / llvm instalados manualmente.
Obtenga todos sus paquetes actualizados. En una consola, ejecuta:
sudo apt-get update
Asegúrese de tener todos los paquetes básicos para construir el software C / C ++. En la consola, ejecuta:
sudo apt-get install build-essential
Eso termina las precauciones. Siguiente:
Instale llvm desde el repositorio estándar de ubuntu 12.04. Obtendrás uno viejo, v2.9 pero está bien por ahora:
sudo apt-get install llvm
Ahora tienes todo el software que necesitas. Mantenga esa consola a mano e inicie C :: B en su proyecto sencillo de llvm.
Como ahora tiene una instalación de sistema estándar de llvm, cambie las segundas dos directivas
#include
de su código fuente a lo siguiente:#include <llvm/Module.h>
#include <llvm/LLVMContext.h>
Obtenga llvm para decirle qué opciones del compilador necesita pasar a GCC. En la ejecución de la consola:
llvm-config --cxxflags
Copie la salida de ese comando de la consola al portapapeles. En C :: B, abra las opciones de compilación de su proyecto y navegue por las configuraciones del compilador -> Otras opciones para GCC. En el cuadro de edición Otras opciones , pegue las opciones del compilador del portapapeles y OK.
Obtenga llvm para decirle qué bibliotecas necesita vincular. En la ejecución de la consola:
llvm-config --libs
Copie la salida de ese comando de la consola al portapapeles (esta vez hay una gran cantidad). En C :: B, navegue por las opciones de compilación -> Configuraciones del enlazador -> Otras opciones del enlazador . En el cuadro de edición, pegue las opciones de la biblioteca del portapapeles y OK.
Obtenga llvm para decirle qué (otras) opciones debe pasar al vinculador. En la ejecución de la consola:
llvm-config --ldflags
Copie la salida de ese comando de la consola al portapapeles. En C :: B, navegue, una vez más, Opciones de compilación -> Configuración del enlazador -> Otras opciones del enlazador En el recuadro de edición, luego de - repetir, después - las opciones de biblioteca que ha pegado previamente allí, pegue las opciones de enlazador adicionales de el portapapeles y OK.
Ahora reconstruya su proyecto y esta vez compilará y vinculará con solo una advertencia para la variable no utilizada
c
(al menos lo hace para mí).
Eso cubre la construcción de su programa. Si ahora lo ejecuta, mostrará "Nunca impreso", lo que supongo que no desea; pero eso es un problema para ti :) Se construye y funciona.
Si también quieres instalar todos los últimos paquetes de llvm y clang, sigue leyendo.
Instale el repositorio llvm toolchain, para Ubuntu 12.04, en sus fuentes de software
sudo add-apt-repository ''deb http://llvm.org/apt/precise/ llvm-toolchain-precise main''
Instale la clave gpg de ese repositorio para autenticar las descargas del paquete desde allí. Tenga en cuenta el guión final en esta línea de comandos :
wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key|sudo apt-key add -
Actualice su base de datos de paquetes nuevamente:
sudo apt-get update
Instala toda la cadena de herramientas llvm + clang:
sudo apt-get install clang-3.4 clang-3.4-doc libclang-common-3.4-dev libclang-3.4-dev libclang1-3.4 libclang1-3.4-dbg libllvm-3.4-ocaml-dev libllvm3.4 libllvm3.4-dbg lldb-3.4 llvm-3.4 llvm-3.4-dev llvm-3.4-doc llvm-3.4-examples llvm-3.4-runtime cpp11-migrate-3.4 clang-format-3.4
Demuestra que tienes clang 3.4:
clang -v
Este comando debería generar:
Ubuntu clang version 3.4-1~exp1 (trunk) (based on LLVM 3.4)
Target: x86_64-pc-linux-gnu
Thread model: posix
Finalmente, es posible que desee configurar C :: B para usar clang en lugar de GCC. Solo te haré comenzar.
- En C :: B, vaya a la configuración del compilador para GCC y haga clic en el botón Copiar . En el cuadro de edición Add new compiler , ingrese
clang-3.4
y haga clic en OK. A continuación, siga el mensaje que C :: B le ofrece para actualizar la página "Ejecutables de la cadena de herramientas" .