编译CoreCLR需要Clang 3.5,而CentOS上安装的是Clang 3.4.2(yum repos中最新版也是这个),只能自己手工编译LLVM的源代码进行安装。

(注:CentOS的版本是6.6)

一、安装libstdc++4.7

(注:如果是CentOS 7.0,不需要这步)

  1. wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
  2. yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++
  3. ln -s /opt/rh/devtoolset-2/root/usr/bin/* /usr/local/bin/

如果不安装,在configure配置编译选项时会出现下面的错误提示:

  1. We detected a missing feature in the standard C++ library that was known to be
  2. missing in libstdc++4.6 and implemented in libstdc++4.7. There are numerous
  3. C++11 problems with 4.6's library, and we don't support GCCs or libstdc++ older
  4. than 4.7.

二、安装Python 2.7.9

(注:如果是CentOS 7.0,不需要这步)

CentOS 6.6自带的是Python 2.6.6,而编译llvm需要Python 2.7以上。

1)安装编译Python需要的包包

  1. yum install zlib-devel
  2. yum install bzip2-devel
  3. yum install openssl-devel
  4. yum install ncurses-devel
  5. yum install sqlite-devel

2)下载并解压Python 2.7.9的源代码

  1. cd /opt
  2. wget --no-check-certificate https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz
  3. tar xf Python-2.7.9.tar.xz
  4. cd Python-2.7.9

3)编译与安装Python 2.7.9

  1. ./configure --prefix=/usr/local
  2. make && make altinstall

4)将python命令指向Python 2.7.9

  1. ln -s /usr/local/bin/python2.7 /usr/local/bin/python

三、添加交换分区

如果编译的机器内存比较小,建议添加交换分区。我当时测试的机器只有1G内存,在编译过程中出现了“c++: internal compiler error: Killed (program cc1plus)”错误。

1)创建并激活交换文件(比如2G):

  1. dd if=/dev/zero of=/swapfile bs=1k count=2048000
  2. mkswap /swapfile
  3. swapon /swapfile

2)修改 /etc/fstab 文件让交换文件启动时自动加载,添加如下内容:

  1. /swapfile swap swap defaults 0 0

四、编译LLVM

1)下载llvm的源代码

  1. http://llvm.org/releases/3.5.0/llvm-3.5.0.src.tar.xz
  2. mv llvm-3.5.0.src llvm

2)下载clang的源代码

  1. cd llvm/tools
  2. wget http://llvm.org/releases/3.5.0/cfe-3.5.0.src.tar.xz
  3. tar xf cfe-3.5.0.src.tar.xz
  4. mv cfe-3.5.0.src clang

3)下载compiler-rt的源代码

  1. cd ../projects
  2. wget http://llvm.org/releases/3.5.0/compiler-rt-3.5.0.src.tar.xz
  3. tar xf compiler-rt-3.5.0.src.tar.xz
  4. mv compiler-rt-3.5.0.src compiler-rt

4)配置编译选项

  1. cd ..
    ./configure --enable-optimized CC=gcc CXX=g++

5)编译llvm

  1. make -j2

编译成功后的提示:

  1. llvm[0]: ***** Completed Release+Asserts Build

6)安装编译好的llvm

  1. make install

会安装在/usr/local/bing中

7)检查clang的版本

  1. # clang --version
  2. clang version 3.5.0 (tags/RELEASE_350/final)

如果还是旧版本,需要将/usr/bin/clang指向clang 3.5.0:

  1. ls -s /usr/local/bin/clang /usr/bin/clang

【相关链接】

如何在CentOS上安装libstdc++4.7

在Linux CentOS 6.6上安装Python 2.7.9

在Linux CentOS上编译并安装Clang 3.5.0的更多相关文章

  1. 在Linux CentOS上编译CoreCLR

    经过几天的努力,终于解决了在CentOS上编译CoreCLR的问题.最终发现问题是CMAKE_C_FLAGS的设置引起的. 只要在“src/pal/tools/clang-compiler-overr ...

  2. centos上源码安装clang 3.8

    之前想在centos系统上安装clang 3.6版本,由于yum上版本太低,想通过源码编译安装.按照网上说的源码安装步骤,下好llvm.clang.clang-tools-extra和compiler ...

  3. 在Mac/Linux/Windows上编译corefx遇到的问题及解决方法

    这两天尝试在Mac/Linux/Windows三大平台上编译.NET跨平台三驾马车(coreclr/corefx/dnx)之一的corefx(.NET Core Framework),结果三个平台的编 ...

  4. NoSql1 在Linux(CentOS)上安装memcached及使用

    前言:       今天是初五,生活基本要从过年的节奏中回归到正常的生活了,所以想想也该想想与工作有关的事情了.我之前在工作中会经常使用memcached和redis,但是自己一直没有时间系统的好好看 ...

  5. Linux CentOS上安装 MySQL 8.0.16

    前言: 因为我需要在我新安装的Linux CentOS系统服务器中安装和配置MySQL服务器,然而对于我们这种Linux使用小白而言在Linux系统中下载,解压,配置MySQL等一系列的操作还是有些耗 ...

  6. 如何在linux CentOS 上安装chrome 谷歌浏览器?

    获得linux命令的root权限:http://blog.csdn.net/mddy2001/article/details/76521101. 更改密码在终端中输入:sudo passwd root ...

  7. 在Linux CentOS上部署Asp.Net Core项目(Tengine、Asp.Net Core、Centos、MySql)

    一.前言 1.简单记录一下Linux CentOS 7中安装与配置Tengine的详细步骤. 2.简单比较一下Tengine 和Nginx 3.搭建Asp.net Core和部署 Web程序 4.总结 ...

  8. 【转】Centos下编译升级安装Boost

    https://www.xingchenw.cn/article/191 Centos下编译升级安装Boost 首先在官网现在相应的包 https://www.boost.org/users/down ...

  9. CentOS上使用yum安装Apache

    关键词 CentOS上使用yum安装Apache 摘要 Apache在Linux系统中,其实叫“httpd”,它“无耻的”占据了官方名义!CentOS可以使用yum命令,非常简单和容易的安装Apach ...

随机推荐

  1. WPF TextBlock文本纵向排列

    一.将TextBlock文本纵向排列输出有两种模式. 1.文字正常放置,只是纵向排列. 2.文字同样旋转90度,纵向排列. 二.详见下文实例 1.文本正常放置,纵向排列. (1)后台代码 string ...

  2. Explode TArray

    function Explode(const Separator, S: string; Limit: Integer = 0): TArray;var SepLen : Integer; F, P ...

  3. 通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系

    先说一下个人理解的结论吧: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类. delegate声明的变量与delegate声明的事件,并没有本质的区别,事件是在dele ...

  4. notepad++如何设置自动换行

    视图(View)——>自动换行(Word wrap)

  5. 搭建本地MAVEN NEXUS 服务

    下载 http://120.192.76.70/cache/www.sonatype.org/downloads/nexus-latest-bundle.zip?ich_args=232fba36ed ...

  6. POJ 1661 Help Jimmy LIS DP

    http://poj.org/problem?id=1661 对板按高度排序后. dp[i][0]表示现在站在第i块板上,向左跑了,的状态,记录下时间和其他信息. O(n^2)LIS: 唯一的麻烦就是 ...

  7. openssl API网络通信

    1.本文是在别人的基础上,经过测试,大体总结的.操作环境ubuntu12和ubuntu14 ****************************************************** ...

  8. C 语言 *** glibc detected *** free(): invalid next size (fast): 0x0000000000be1010 ***

    . . . . . LZ 今天在写一个 Socket 程序的时候使用 malloc(3) 在堆上动态分配了一个结构体的空间,在使用完之后用 free(3) 函数释放空间的时候报 invalid nex ...

  9. (引用) unittest测试驱动之执行测试(三)

    转载:http://www.wtoutiao.com/p/ydeoyY.html 在unittest的模块中,提供了TestRunner类来进行运行测试用例,在实际的应用中,经常使用的是TextTes ...

  10. spilt()的用法

    split() 方法用于把一个字符串分割成字符串数组.<script type="text/javascript"> var str="How are you ...