经过几天的努力,终于解决了在CentOS上编译CoreCLR的问题。最终发现问题是CMAKE_C_FLAGS的设置引起的。

只要在“src/pal/tools/clang-compiler-override.txt”中删除“SET (CMAKE_C_FLAGS_INIT "-Wall -std=c11") ”,在“src/pal/tests/CMakeLists.txt”中添加“SET (CMAKE_C_FLAGS "-Wall -std=c11")”,就能编译了。(更新:后来找到一个更好的解决方法:只需要将-std=c11改为-std=gnu11)

下面分享一下在CentOS上编译CoreCLR的操作步骤。

所用的CentOS版本7.0。

1)下载llvm的源代码

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

2)下载clang的源代码

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

2+)下载lldb的源代码及安装相关组件

wget http://llvm.org/releases/3.5.0/lldb-3.5.0.src.tar.xz
tar -xf lldb-3.5.0.src.tar.xz
mv lldb-3.5.0.src lldb
yum install swig python-devel libedit-devel

3)下载compiler-rt的源代码

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

4)下载libcxxabi的源代码

wget http://llvm.org/releases/3.5.0/libcxxabi-3.5.0.src.tar.xz
tar -xf libcxxabi-3.5.0.src.tar.xz
mv libcxxabi-3.5.0.src.tar.xz libcxxabi

5)下载libcxx的源代码

wget http://llvm.org/releases/3.5.0/libcxx-3.5.0.src.tar.xz
tar xf libcxx-3.5.0.src.tar.xz
mv libcxx-3.5.0.src libcxx

6)配置编译选项

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

7)编译llvm

make -j2

8)安装编译好的llvm

make install

(如果只安装lldb,只需进入llvm/tools/lldb中运行make install)

9)签出CoreClr的源代码进行编译

git clone https://github.com/dotnet/coreclr.git
cd coreclr
./build.sh

10)安装libunwind

wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz
tar -xf libunwind-1.1.tar.gz
cd libunwind-1.1
./configure
make
make install

如果不安装libunwind会出现下面的错误:

/data/git/coreclr/src/pal/src/exception/seh-unwind.cpp:32:10:
fatal error: 'libunwind.h' file not found

10)解决"Native context type is not known"编译错误

编译过程中出现如下的错误:

-- Check size of siginfo_t
-- Check size of siginfo_t - failed
-- Check size of ucontext_t
-- Check size of ucontext_t - failed
...
[ 0%] Building CXX object src/palrt/CMakeFiles/palrt.dir/bstr.cpp.o
In file included from /data/git/coreclr/src/pal/src/arch/i386/context.cpp:25:
/data/git/coreclr/src/pal/src/include/pal/context.h:40:2: error:
Native context type is not known on this platform!

修改 src/pal/tools/clang-compiler-override.txt 文件,去掉 SET (CMAKE_C_FLAGS_INIT "-Wall -std=c11") 可以解决这个问题。

(更新:后来找到一个更好的解决方法:只需要将-std=c11改为-std=gnu11)

10)解决"use of undeclared identifier"编译错误

继续编译过程中出现如下的错误:

/data/git/coreclr/src/pal/tests/palsuite/c_runtime/wprintf/test2/test2.c:
31:15: error: use of undeclared
identifier 'u'
DoStrTest(u"foo %s", u"bar", u"foo bar");

在 src/pal/tests/CMakeLists.txt 中添加 SET (CMAKE_C_FLAGS "-Wall -std=c11") 可以解决这个问题。

(更新:后来找到一个更好的解决方法:只需要将-std=c11改为-std=gnu11)

11)大功告成

Repo successfully built.
Product binaries are available at /data/git/coreclr/binaries/Product/amd64/debug

在Linux CentOS上编译CoreCLR的更多相关文章

  1. 在Linux CentOS上编译并安装Clang 3.5.0

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

  2. .NET跨平台:在Linux Ubuntu上编译coreclr/corefx/dnx(20150617)

    编译时间:北京2015年6月17日上午 操作系统:Ubuntu 14.04.2 LTS Mono版本:Mono JIT compiler version 4.3.0 (master/3445ac5 T ...

  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安装编译phantomjs 2.0的方法

    phantomjs 2.0最新版的官方不提供编译好的文件下载,只能自己编译,有教程但是过于简单,特别是服务器上要安装N多的支持.折腾到现在终于装好了并且能正常运行了,截图mark一下: linux c ...

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

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

  7. Win10上编译CoreCLR的Windows和Linux版本

    一.编译环境 首先,不管是Windows还是Linux版本CoreCLR的编译,都是在Windows10上进行的. 二.CoreCLR for Windows 在Windows上做编译怎么能少得了Vi ...

  8. 如何在linux平台上编译安装zlib软件(公司部分线上机器缺少zlib不能安装supervisor)

    文章在Centos  6.5 linux平台上演示一下如何进行编译安装zlib软件,并配置相关的选项加载使用.示范从下载到安装并配置进行使用过程一系列整套讲解,希望可以给网友考虑使用,谢谢.   工具 ...

  9. 在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.总结 ...

随机推荐

  1. 多个 git ssh key 配置 Ubuntu os

    1.生成ssh key: ssh-keygen -t rsa -C “email@sss.com” 此时,在~/.ssh/文件夹下会有两个文件, id_rsa 和 id_rsa.pub.分别保存ssh ...

  2. Android之使用Android-AQuery异步加载图片(一)

    第一节:转载地址(http://www.cnblogs.com/lee0oo0/archive/2012/10/25/2738299.html) // 必须实现AQuery这个类 AQuery aq ...

  3. 基于tcp/udp的协议

    使用TCP协议的常见端口主要有以下几种: (1) FTP:定义了文件传输协议,使用21端口.常说某某计算机开了FTP服务便是启动了文件传输服务.下载文件,上传主页,都要用到FTP服务. (2) Tel ...

  4. 解决关于ArcGIS10.2服务手动启动的问题

    解决关于ArcGIS10.2服务手动启动的问题 C:\program files\arcgis\license10.2\bin> lmgrd -z -c service.txt新建一文本,将上面 ...

  5. 《Linux内核设计与实现》读书笔记 第十七章 设备与模块

    一.设备类型 1. Unix系统 - 块设备 - 字符设备 - 网络设备 2. 块设备 通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同:块设备通常支持重定位操作,也就是对 ...

  6. AEScrypto WEB and ANDROID (GITHUB)

    https://github.com/evgenyneu/aes-crypto-android https://github.com/evgenyneu/aes-crypto-web https:// ...

  7. scala 学习:object 和class, trait

    object: Scala中没有静态修饰符,static,在object下的成员全部都是静态的,如果在类中声明了与该类相同的名字的object则该object是该类的"半生对象", ...

  8. Delphi编译的程序,查看控件名称方法

    使用SpyLite24这个软件可以查看程序所使用的控件名称

  9. OpenLDAP与phpldapadmin的搭建

    最近一直在看LDAP的东西,把自己的记录下来,以后可以看看. 1:环境 1):关闭防火墙 service iptables stop 2):setenforce 0 vim /etc/sysconfi ...

  10. css小tip

    1. <input>标签的默认样式 当在页面中添加一个input标签,当点击输入框时会有一个外边框包裹着,可以使用 : input { outline: none} 去除点击时产生的外边框 ...