我对linux非常陌生,不知道在哪里需要将Clang预构build的二进制文件http://llvm.org/releases/download.html#3.3 。 我下载它,用鼠标解包,并添加path到/ bin到我的$ PATH,path到/ lib到$ LD_LIBRARY_PATH,并添加* .confpath到我的/ lib到/etc/ld.so.conf.d 。 我甚至重新启动笔记本。
…但仍然不能使用Code :: Blocks GCC构build我的简单程序(error:/home/aadgrand/tmp/LLVM-3.3/final/llvm.src/lib/Support/Signals.cpp – 对“dladdr”的未定义引用) )。 testing程序文本:
#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; }
还有什么我需要做的? 也许我需要使用* .sig文件? 嗯?
与如何使用预编译的二进制文件安装CLang相同的问题? 。 对不起,重复,但它真的非常有趣和重要。
=====更新======
我刚刚安装了llvm-3.1,与llvm-3.4(来自预编译的二进制文件)相同的错误:
-------------- 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 ===|
你的问题的标题误导了我自己和Atropo。 看起来好像你想安装clang C ++编译器,并在Code :: Blocks中建立一个llvm C ++程序。
你实际上想要做的是安装clang + llvm(它们实际上是不同的东西),并用Code :: blocks中的GCC构建一个llvm程序。 你确实说过“Code :: Blocks GCC”,但是我认为这只是意味着“我已经使用GCC设置了Code :: Blocks,现在我想使用clang”。 但是,您添加的C :: B构建日志显示您使用GCC 构建 。
鉴于你正在用GCC构建你的llvm程序,目前还不清楚你为什么要安装clang编译器。 也许你想使用clang,但是你不知道Code :: Blocks可以支持clang编译器,或者不知道如何配置C :: B来使用clang。 但是,我们一起做一件事。 你可以用gcc构建这个llvm程序,如果你只是把事情设置好了。 而且 – 一个单独的问题 – 你可以正确安装clang。 而且 – 另一个单独的问题 – 你可以配置C :: B与铛建立,如果你想。
Atropo粘贴命令安装最新的铛及其调试器lldb。 但是clang并不需要所有的llvm库,只需要安装clang,lldb并不会给你所有需要的库来构建你的llvm程序。
你在你的一个评论中说过,你已经能够在终端上用clang ++来建立你的程序了。 这表明你在那个时候已经安装了clang和llvm的工作手册。 但是我不知道在干预之后是否仍然有一个,而且我同意Atropo手动安装这样复杂的软件 – 定制你的PATH
和LD_LIBRARY_PATH
等等 – 比一个包中的托管安装要合理得多反包,让包管理者把事情搞定。
首先,让我们在C :: B中使用gcc构建您的llvm程序,为此,从一些可能需要或不需要的预防步骤开始:
撤消所做的所有自定义操作,删除或隐藏手动安装的clang / llvm二进制文件。
获取最新的所有软件包。 在控制台中运行:
sudo apt-get update
确保您拥有构建C / C ++软件的所有基本包。 在控制台中运行:
sudo apt-get install build-essential
这完成了预防措施。 下一个:
从标准的Ubuntu 12.04版本库安装llvm。 你会得到一个旧的,V2.9,但现在没关系:
sudo apt-get install llvm
现在你已经拥有了你需要的所有软件。 方便地保持这个控制台,并在简单的llvm项目中启动C :: B。
正如你现在有一个标准的系统安装llvm,改变你的源代码的第二个#include
指令到以下内容:
#include <llvm/modulee.h>
#include <llvm/LLVMContext.h>
让llvm告诉你需要传递给GCC的编译器选项。 在控制台运行:
llvm-config --cxxflags
将该命令的输出从控制台复制到剪贴板。 在C :: B中,打开项目的构建选项并导航编译器设置 – > GCC的其他选项 。 在其他选项编辑框中,粘贴剪贴板中的编译器选项并确定。
让llvm告诉你需要链接的库。 在控制台运行:
llvm-config --libs
将该命令的输出从控制台复制到剪贴板(这次有很多)。 在C :: B中,导航构建选项 – > 链接器设置 – > 其他链接器选项 。 在编辑框中,粘贴剪贴板中的库选项并确定。
让llvm告诉你需要传递给链接器的其他选项。 在控制台运行:
llvm-config --ldflags
将该命令的输出从控制台复制到剪贴板。 在C :: B中,再次导航生成选项 – > 链接器设置 – > 其他链接器选项在编辑框中, 在重复之后 ,之前粘贴的库选项粘贴到其他链接器选项剪贴板,并确定它。
现在重建你的项目,这次它只会编译和链接只有一个警告为未使用的变量c
(至少它对我来说)。
这涵盖了建立你的程序。 如果你现在运行它,它会输出“从不打印”,我猜你不希望它, 但这对你来说是一个问题:)它建立并运行。
如果你还想安装所有最新的llvm和clang软件包,请继续阅读。
在您的软件源中安装Ubuntu 12.04的llvm工具链储存库
sudo add-apt-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise main'
安装该存储库的gpg密钥以从其中认证软件包的下载。 注意这个命令行的最后一个连字符 :
wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key|sudo apt-key add -
再次刷新你的包数据库:
sudo apt-get update
安装整个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
证明你有叮当3.4:
clang -v
这个命令应该输出:
Ubuntu clang version 3.4-1~exp1 (trunk) (based on LLVM 3.4) Target: x86_64-pc-linux-gnu Thread model: posix
最后,你可能想要配置C :: B使用clang而不是GCC。 我会让你开始。
clang-3.4
,然后点击OK。 然后按照C :: B提示您更新“工具链可执行文件”页面的提示进行操作 。 而不是手动安装它,你可以使用LLVM
仓库,把它添加到你的apt
源,并通过apt-get
或Ubuntu数据包管理器进行安装。 请参阅LLVM apt回购如何做到这一点。
按照安装段落中所写的步骤,在终端中执行以下步骤:
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