经过几天的努力,终于解决了在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. Regularization on GBDT

    之前一篇文章简单地讲了XGBoost的实现与普通GBDT实现的不同之处,本文尝试总结一下GBDT运用的正则化技巧. Early Stopping Early Stopping是机器学习迭代式训练模型中 ...

  2. window date type

    Most string operations can use the same logic for Unicode and for Windows code pages. The only diffe ...

  3. hdu 3667 拆边加最小费用流

    Transportation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. device tree 生成device node 到 platform_device

    http://blog.csdn.net/lichengtongxiazai/article/details/38942033 http://blog.csdn.net/mcgrady_tracy/a ...

  5. jquery的常用ajax操作

    $.ajax() 定义和用法 ajax() 方法通过 HTTP 请求加载远程数据. 该方法是 jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() ...

  6. Tara's Beautiful Permutations 组合数学

    https://www.hackerrank.com/contests/hourrank-15/challenges/taras-beautiful-permutations 首先先统计一下个数为2的 ...

  7. sql ltrim rtrim

    sql中用LTRIM ( ),RTRIM ( ).分别截断首尾空格,返回字符表达式. 例1: DECLARE @string_to_trim varchar(60)SET @string_to_tri ...

  8. ORA-12505 错误解决

     在Fedora下安装了Oracle 10gR2,安装完成之后,使用netca创建了监听,创建的时候没有使用默认的LISTENER和1521端口,而是使用了LISTENER_DELL和1522端口,终 ...

  9. eclipse使用技巧、快捷键

    1.alt+/  自动提示符,可以快速补整,提高效率.  输入Sysout,再按下alt+/,就可以打印了.  输入main,再按下alt+/,可以直接显示main方法. 2.ctrl+左键,快速进入 ...

  10. Java 基础知识总结 (三、运算符)

    三.Operators 运算符 Assignment Operators(赋值运算符) =   +=   -=   %=   *=   /=    <<=     >>=    ...