【本文可能涉及到Ubuntu安装以下工具:】

  A、g++

  B、gcc

  C、make

  D、cmake

  E、clang(10.0.1)(必须)

  F、llvm(10.0.1)(必须)

  G、lldb(10.0.1)(可选)

  H、libcxx(10.0.1)(必须)

  I、libcxx abi(10.0.1)(必须)

  J、compiler-rt(可选)

【心累】

  我目前有两台虚拟机: A、Ubuntu【ubuntu-20.04.1-desktop-amd64.iso】, B、fedora【Fedora-Workstation-Live-x86_64-32-1.6.iso】。 A可以正常与物理机文件共享,但是缺乏开发环境;B可以非常方便的搭建开发环境,但是与物理机的文件共享存在问题(虚拟机设置了文件共享,但是虚拟机无法挂载,这是其一;手动挂载Windows10共享文件夹,各种出问题(语法,正确,密码正确,防火墙关了,....)还是无法使用mount cifs挂载,折腾了好久, 终究选择放弃折腾)。选择A搭建开发环境搭建。

【1、其他教程】

  llvm+clang 源码安装教程【http://www.nagain.com/activity/article/4/

  教程使用的是svn下载源码再编译安装,本文是直接从官网下载源码并安装,非svn, 为什么不用svn?1、目前, svn检出项目各种超时,无法完整下载源码;2、准备了T子,经测,没用。

【2、源码下载】

  网站:【https://releases.llvm.org/download.html

  源码有这些:

  我这里选择了:

1 llvm-project monorepo source code (.sig)
2 LLVM source code (.sig)
3 Clang source code (.sig)
4 compiler-rt source code (.sig)
5 libc++ source code (.sig)
6 libc++abi source code (.sig)
7 LLDB Source code (.sig)

  哦,忘了,还有【CMake】,我下载了: 【cmake-3.18.2-linux-x86_64.sh 】

  【为什么不直接在虚拟机使用命令安装?慢!慢!慢! 这个步骤更是让人心累: 物理机C下载上面所需的源码,慢的要死:预计需要好几个小时才能下载好,要不就是 IDM 下载到 99% 失败。有人说,准备梯子,没有用,T子准备好了,并没有任何变化(油管 English with Lucy的视频看完了,下载还是不到20kb/s)。肯定你会想到修改hosts,更新到最新的hosts,还是没有效果(自己写了程序,每天定时获取最新版hosts)。 于是,换mac执行下载,意想不到的是: 下载速度则快,直接宽带跑满。 原本在物理机C上下载需要好几个小时甚至更长,mac下载上面所需源码仅仅不到2mins,都没有准备T子。

  可能你会说,使用命令:sudo apt-get install clang-7.0 不好? 额,我把镜像切换为国内的几个大厂镜像做了尝试,下载贼慢,还不如我下载海外镜像来的快。物理机C打开T子,还是下载贼慢,呼,真的是心累。还有就是使用svn, 直接检出,Ubuntu和物理机C 均显示超时,无法完整检出项目,挂了T子也没有用。)

  各种折腾。为什么国内下载这么难?难道是GFW2.0升级到了3.0 ? 为什么mac下载就能跑满带宽?】

  扯远了。回到正文

【3、 gcc、g++、make 安装】

  A、将下载好的源码放入虚拟机

  B、安装 gcc、g++、make : 命令(可能镜像下载较慢,我反正是等了很久):

$ sudo apt-get install gcc
$ sudo apt-get install g++
$ sudo apt-get install make

【4、cmake源码安装】

  A、源码安装cmake,解压源码,使用终端打开解压后的文件夹,执行命令:

$ cd to/path/cmake_src/
$ sh cmake-3.18.2-linux-x86_64.sh # 解压拿到已经编译好的文件

  B、将cmake添加到环境变量,这个就不造轮子了。提醒:使用命令【echo $SHELL】查看使用的是何种SHELL,就将cmake添加到对应shell的配置文件,通常是在【home】下的 【.bashrc】文件配置(注意,修改该文件权限); 若使用 【oh-my-zsh】 ,则是在【home】下的【.zshrc】。添加指向解压目录下的bin目录,向shell的配置文件中追加添加下面的两行:

#cmake
export PATH= xxx/bin:$PATH   # xxx = cmake的解压目录

  一个例子:

#cmake
export PATH=/home/google/cmake/bin:$PATH

  C、保存后,使用命令: 【source 配置文件】刷新即可。或者注销或者重启即可。例如,我使用的是oh-my-zsh,则使用下面命令刷新配置:

source ~/.zshrc

  查看是否安装成功, 可使用命令【cmake --version】查看结果:

【5、编译llvm】

  按照教程【http://www.nagain.com/activity/article/4/】,将下载好的源码放到对应的目录下,执行命令编译即可。

  【注意】如果出现类似【 Killed (program cc1plus)】的错误,则说明内存资源不够,可参考【https://blog.csdn.net/u011897411/article/details/89742008】创建分区(我的2G内存已经跪了,不够用,增加到4G,并创建了分区,分区大小,根据个人情况而定)

  A、解压 lllvm  源码

  B、将  clang  解压的源码放入到llvm的tools文件夹下: llvm/tools/clang 存放解压后的文件如下:

  C、将 compiler-rt  解压到的源码放到 llvm的projects文件夹下: lllvm/projects/compiler-rt 存放解压后的文件

  D、libcxx解压到 llvm 目录下的 projects 文件夹:

  E、将 libcxx abi 解压到  llvm 目录下的 projects 文件夹:

  结果:

  G、将 lldb 源码 解压到 llvm 目录下 tools 目录:

  H、回到llvm解压后的目录,创建 build 作为输出目录: 执行 cmake构建命令:

1 cd to/path/llvm
2 mkdir build && cd build
3 cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..

  I、执行make -j <X>

1 make -j 4

  耐心等待编译结果 。(12/09/2020  01:45   正在等待编译结果)

  J、一觉起来,都编译好了

。。。。。。。。
[ 98%] Built target clangFrontendTool
Scanning dependencies of target c-index-test
[ 98%] Building C object tools/clang/tools/c-index-test/CMakeFiles/c-index-test.dir/c-index-test.c.o
[ 98%] Building CXX object tools/clang/tools/c-index-test/CMakeFiles/c-index-test.dir/core_main.cpp.o
[ 98%] Linking CXX shared module ../../../../../../lib/CheckerOptionHandlingAnalyzerPlugin.so
[ 98%] Linking CXX shared module ../../../../../../lib/CheckerDependencyHandlingAnalyzerPlugin.so
[ 98%] Linking CXX shared module ../../../../../../lib/SampleAnalyzerPlugin.so
[ 98%] Built target CheckerOptionHandlingAnalyzerPlugin
Scanning dependencies of target clang-cpp
[100%] Building CXX object tools/clang/tools/clang-shlib/CMakeFiles/clang-cpp.dir/clang-shlib.cpp.o
[100%] Linking CXX shared library ../../../../lib/libclang-cpp.so
[100%] Built target CheckerDependencyHandlingAnalyzerPlugin
Scanning dependencies of target c-arcmt-test
[100%] Building C object tools/clang/tools/c-arcmt-test/CMakeFiles/c-arcmt-test.dir/c-arcmt-test.c.o
[100%] Linking CXX executable ../../../../bin/c-arcmt-test
[100%] Built target c-arcmt-test
Scanning dependencies of target clang-check
[100%] Building CXX object tools/clang/tools/clang-check/CMakeFiles/clang-check.dir/ClangCheck.cpp.o
[100%] Built target SampleAnalyzerPlugin
Scanning dependencies of target clangDependencyScanning
[100%] Linking CXX static library ../../../../../lib/libclangDependencyScanning.a
[100%] Built target clangDependencyScanning
Scanning dependencies of target clang
[100%] Building CXX object tools/clang/tools/driver/CMakeFiles/clang.dir/driver.cpp.o
[100%] Building CXX object tools/clang/tools/driver/CMakeFiles/clang.dir/cc1_main.cpp.o
[100%] Linking CXX executable ../../../../bin/c-index-test
[100%] Linking CXX executable ../../../../bin/clang-check
[100%] Built target clang-cpp
Scanning dependencies of target clang-scan-deps
[100%] Building CXX object tools/clang/tools/clang-scan-deps/CMakeFiles/clang-scan-deps.dir/ClangScanDeps.cpp.o
[100%] Built target c-index-test
[100%] Building CXX object tools/clang/tools/driver/CMakeFiles/clang.dir/cc1as_main.cpp.o
[100%] Building CXX object tools/clang/tools/driver/CMakeFiles/clang.dir/cc1gen_reproducer_main.cpp.o
[100%] Built target clang-check
[100%] Linking CXX executable ../../../../bin/clang
[100%] Linking CXX executable ../../../../bin/clang-scan-deps
[100%] Built target clang-scan-deps
[100%] Built target clang

  K、查看clang 和 clang++的版本信息,

【6、添加clang和clang++到环境变量】

  A、我使用的是oh-my-zsh美化的终端,所以,需要在其对应的配置文件 【home】下的【.zshrc】追加下面的命令:

# clang clang++
export PATH=to/llvm_path/llvm-10.0.1/build/bin:$PATH

  B、添加成功, 键入命令【clang++ --version】,输出:

  C、代码测试

【7、重新编译llvm】

  使用clang 重新编译llvm . 来到【 llvm/build 目录 命令:

CC=clang CXX=clang++ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..

ubuntu下载源码clang + llvm+lldb 编译+安装的更多相关文章

  1. Ubuntu TensorFlow 源码 Android Demo的编译运行

    Ubuntu TensorFlow 源码 Android Demo的编译运行 一. 安装 Android 的SDK和NDK SDK 配置 A:下载 国内下载地址选最新的: SDK: https://d ...

  2. Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

    原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底 ...

  3. Ubuntu下载源码并编译

    本文章将介绍如何在Ubunt下进行Linux源码下载,并进行简单的编译步骤. 1.下载linux源码 先查看对应的Ubuntu对应版本源码 $ sudo apt-cache search linux- ...

  4. maven编译下载源码

    下载源码 mvn dependency:sources 跳过TEST mvn  -DskipTests

  5. ubuntu 下源码安装Postgreql pgAdmin3

    一.安装 PostgreSQL 1.安装相关依赖,在终端下执行: sudo apt-get install zlib1g-dev    sudo apt-get install libreadline ...

  6. 【转】Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)

    原文网址:http://blog.csdn.net/qiuxiaolong007/article/details/7860481 记于正文前:环境是ubuntu10.10,android 源码是2.0 ...

  7. EDKII Build Process:EDKII项目源码的配置、编译流程[三]

    <EDKII Build Process:EDKII项目源码的配置.编译流程[3]>博文目录: 3. EDKII Build Process(EDKII项目源码的配置.编译流程) -> ...

  8. Andriod下载源码导入后AndroidManifest.xml小红叉的解决办法

    问题描述: 下载源码后,用eclipse导入,AndroidManifest.xml小红叉,而且AndroidManifest.xml打不开无法编译,请高人指点! 解决办法: 网上下载的工程文件夹不要 ...

  9. 在Ubuntu上源码安装NodeJS

    Refer http://nqdeng.github.io/7-days-nodejs/#7.1 前提条件: 确保系统下g++版本(g++ -v)在4.6以上,python版本(python --ve ...

随机推荐

  1. 自定义 Word 模板

    自定义 Word 模板 目录 必要设置 样式设置 标题样式 多级列表 封面 正文 引用目录 页码 页眉 图标 自定义模板保存 样式导入和导出 批量删除多余空白段落 必要设置 显示所有格式标记 选择&q ...

  2. nrf 51802 和 nrf51822 的区别于联系

    51802QFAA与51822QFAA在FLASH 跟RAM的容量没有差别:区别在于:a,接收灵敏度 51802是-91dBm;51822是-93dBm,这个差异导致接收距离有差异:b,Tx Powe ...

  3. SimpleNVR如何把安防监控画面推流到微信公众号直播

    背景需求 进入移动互联网时代以来,微信已成为许多企业除官网以外必备的宣传渠道,当3.2亿直播用户与九亿微信用户的势能增加,在微信上开启直播已成为越来越多企业的不二选择. 需求分析 微信公众号作为平台来 ...

  4. HDFS06 DataNode

    DataNode 目录 DataNode DataNode工作机制 数据完整性 DataNode掉线时限参数设置 DataNode工作机制 一个数据块在DataNode上以文字形式存储在磁盘上,包括一 ...

  5. 技术管理进阶——Leader的模型、手段及思维

    这里可以添加关注交流一下嘛-- 本文更多的是个人认知,有不足请批评. ​Case 在之前一次年底考评的时候,有一位leader将一个案例同时用到了自己和下属身上,老板发出了责问: 这个项目到底你是负责 ...

  6. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-文件管理初步介绍

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  7. oracle first_value,last_valus

    first_value和last_value 是用来去分析函数窗口中对应列的第一个值和最后一个值的函数. 语法如下: first_value(col [ignore NULLS]) over([PAR ...

  8. String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?

    原理知识: 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的.如果在函数中改变了副本的 值不会改变原始的值. 如果参数类型是引用类型,那 ...

  9. Mysql资料 mysqldump

    目录 一.简介 备份过程 优缺点 命令使用 myisam引擎 二.安装 配置 日志 三.日常使用 备份全库 备份单个库(带建立库的语句) 备份单个库(不自动建立库) 备份表合集 从全备中恢复单个库 其 ...

  10. centos部署配置gogs代码仓库

    目录 一.简介 二.部署 三.网页配置 一.简介 Gogs的目标是打造一个最简单.最快速和最轻松的方式搭建自助Git服务.使用Go语言开发使得Gogs能够通过独立的二进制分发,并且支持Go语言支持的 ...