经过几天的努力,终于解决了在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 undeclaredidentifier '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. centos安装llvm_Linux CentOS上编译并安装Clang教程

    如何在Linux CentOS上编译并安装Clang?下面小编为大家具体的介绍一下,解决你在安装Clang遇到的一系列问题. 一.Minimal版CentOS安装Clang前的环境准备 1,安装gcc ...

  2. 在PK体系下的CentOS上编译安装 MySQL 5.7

    本文主要介绍如何在 PK 体系下的 CentOS 上编译安装 MySQL 5.7,本文使用的操作系统环境为: CentOS 版本: # cat /etc/redhat-release CentOS L ...

  3. c 远程编辑linux文件,makefile - 在远程Linux机器上编译C ++ - “检测到时钟偏差”警告...

    makefile - 在远程Linux机器上编译C ++ - "检测到时钟偏差"警告 我通过PuTTY和WinSCP连接到我大学的小型Linux集群,使用后者传输文件,并使用前者编 ...

  4. centos llvm安装_在CentOS上编译安装llvm-3.8.1详细教程

    在CentOS上编译安装llvm-3.8.1详细教程 2020/1/11  18:12 1682次 注:CentOS版本是6.8,6.x版本的操作类似 安装需求: [list] [*]Cmake: 3 ...

  5. linux gnuplot yum源,在CentOS上编译安装gnuplot绘图工具

    gnuplot是一个命令行的交互式绘图工具.用户通过输入命令,可以逐步设置或修改绘图环境,并以图形描述数据或函数,使我们可以借由图形做更进一步的分析. gnuplot是由Colin Kelly和Tho ...

  6. vmware虚拟机Linux(centOS)上用户密码忘记了怎么办?

    虚拟机Linux上用户密码忘记了怎么办? 今天准备再学习一下linux操作系统,由于之前已经安装过vaware和linux(centOS),所以这次认为不用安装直接使用就可以了.但,恼人的是密码给忘了 ...

  7. 初次在Linux CentOS上安装RabbitMQ

    RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电 ...

  8. linux yum安装python3_在Linux - Centos上安装Python3(上)

    必看内容 在Linux上安装Python常用的2种方法 1.Python源码编译安装,有点复杂,适合老司机 2.从EPEL/IUS仓库安装,新手建议使用此方法,比较简单,目前2019-07-31提供最 ...

  9. 在 Linux CentOS 上安装 Couchbase Server

    Couchbase 是一个开源的.分布式的.面向文档(document-oriented)的 NoSQL 数据库,并且内置了 Memcached 服务.本文分享的是自己在 Linux 上成功安装 Co ...

最新文章

  1. 科大奥锐干涉法测微小量实验的数据_光学干涉观测精确丈量宇宙 | 赛先生天文...
  2. arduino下载库出错_arduino的I2C通讯 3:驱动1602液晶屏
  3. C的安装编译Error
  4. ubutnu16.04安装ros2
  5. plsql轻量版触发器
  6. ARMS在APM工具选型中的实践
  7. 《Go语言程序设计》读书笔记(七) 包
  8. 汇编学习--7.16--中断
  9. 【matplotlib笔记】sin图像与cos图像
  10. 数据的展现技巧——数据透视表(一)
  11. Effective Modern C++笔记汇总
  12. LeeCode:救生艇(贪心)
  13. mysql 设置 sql_mode
  14. 01-Spring的初体验:spring工厂的化过程
  15. 走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
  16. 融合办公时代来了?联想Filez带你正确解读“融合办公”新模式
  17. 解析新浪微博JSON数据
  18. python十六进制和十进制相互转换以及由补码求原码
  19. 中国“红客联盟”网上记者会发布重大澄清声明
  20. 【产品方案】如何全面建设B端产品中的数据迁移方案

热门文章

  1. vim ctrlp找到文件后,如何在新窗口或者新标签中打开
  2. __call__ 可调用对象
  3. getattr的巨大作用
  4. python猜数游戏流程_Python 猜数字游戏
  5. 【项目管理】绩效域-工件裁剪对照(工件维度)
  6. 第二、三章:信息系统项目管理基础与立项管理-章节真题
  7. Android和JS之间互相调用方法并传递参数
  8. JS中怎样获取当前年以及前后几年并构造成对象数组
  9. Windows下怎样设置jar包开机自启动运行
  10. ElementUI中使用el-time-picker向SpringBoot传输24小时制时间参数以及数据库中怎样存储