在Linux CentOS上编译CoreCLR
经过几天的努力,终于解决了在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的更多相关文章
- 在Linux CentOS上编译并安装Clang 3.5.0
编译CoreCLR需要Clang 3.5,而CentOS上安装的是Clang 3.4.2(yum repos中最新版也是这个),只能自己手工编译LLVM的源代码进行安装. (注:CentOS的版本是6 ...
- .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 ...
- 在Mac/Linux/Windows上编译corefx遇到的问题及解决方法
这两天尝试在Mac/Linux/Windows三大平台上编译.NET跨平台三驾马车(coreclr/corefx/dnx)之一的corefx(.NET Core Framework),结果三个平台的编 ...
- NoSql1 在Linux(CentOS)上安装memcached及使用
前言: 今天是初五,生活基本要从过年的节奏中回归到正常的生活了,所以想想也该想想与工作有关的事情了.我之前在工作中会经常使用memcached和redis,但是自己一直没有时间系统的好好看 ...
- linux centos安装编译phantomjs 2.0的方法
phantomjs 2.0最新版的官方不提供编译好的文件下载,只能自己编译,有教程但是过于简单,特别是服务器上要安装N多的支持.折腾到现在终于装好了并且能正常运行了,截图mark一下: linux c ...
- 如何在linux CentOS 上安装chrome 谷歌浏览器?
获得linux命令的root权限:http://blog.csdn.net/mddy2001/article/details/76521101. 更改密码在终端中输入:sudo passwd root ...
- Win10上编译CoreCLR的Windows和Linux版本
一.编译环境 首先,不管是Windows还是Linux版本CoreCLR的编译,都是在Windows10上进行的. 二.CoreCLR for Windows 在Windows上做编译怎么能少得了Vi ...
- 如何在linux平台上编译安装zlib软件(公司部分线上机器缺少zlib不能安装supervisor)
文章在Centos 6.5 linux平台上演示一下如何进行编译安装zlib软件,并配置相关的选项加载使用.示范从下载到安装并配置进行使用过程一系列整套讲解,希望可以给网友考虑使用,谢谢. 工具 ...
- 在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.总结 ...
随机推荐
- 多个 git ssh key 配置 Ubuntu os
1.生成ssh key: ssh-keygen -t rsa -C “email@sss.com” 此时,在~/.ssh/文件夹下会有两个文件, id_rsa 和 id_rsa.pub.分别保存ssh ...
- Android之使用Android-AQuery异步加载图片(一)
第一节:转载地址(http://www.cnblogs.com/lee0oo0/archive/2012/10/25/2738299.html) // 必须实现AQuery这个类 AQuery aq ...
- 基于tcp/udp的协议
使用TCP协议的常见端口主要有以下几种: (1) FTP:定义了文件传输协议,使用21端口.常说某某计算机开了FTP服务便是启动了文件传输服务.下载文件,上传主页,都要用到FTP服务. (2) Tel ...
- 解决关于ArcGIS10.2服务手动启动的问题
解决关于ArcGIS10.2服务手动启动的问题 C:\program files\arcgis\license10.2\bin> lmgrd -z -c service.txt新建一文本,将上面 ...
- 《Linux内核设计与实现》读书笔记 第十七章 设备与模块
一.设备类型 1. Unix系统 - 块设备 - 字符设备 - 网络设备 2. 块设备 通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同:块设备通常支持重定位操作,也就是对 ...
- AEScrypto WEB and ANDROID (GITHUB)
https://github.com/evgenyneu/aes-crypto-android https://github.com/evgenyneu/aes-crypto-web https:// ...
- scala 学习:object 和class, trait
object: Scala中没有静态修饰符,static,在object下的成员全部都是静态的,如果在类中声明了与该类相同的名字的object则该object是该类的"半生对象", ...
- Delphi编译的程序,查看控件名称方法
使用SpyLite24这个软件可以查看程序所使用的控件名称
- OpenLDAP与phpldapadmin的搭建
最近一直在看LDAP的东西,把自己的记录下来,以后可以看看. 1:环境 1):关闭防火墙 service iptables stop 2):setenforce 0 vim /etc/sysconfi ...
- css小tip
1. <input>标签的默认样式 当在页面中添加一个input标签,当点击输入框时会有一个外边框包裹着,可以使用 : input { outline: none} 去除点击时产生的外边框 ...