Linux上成功编译CoreCLR源代码

>>Build日期:2015-2-5下午(编译失败)。

开始Linux发行版用的是CentOS 6.5,操作步骤:

1)配置git: git config --global http.sslverify false 

2)签出github上的CoreCLR代码库: git clone https://github.com/dotnet/coreclr.git 

3)安装cmake: yum install cmake 

4)安装clang: yum install clang 

5)运行build命令: sh build.sh 

6)build结果——失败!错误信息如下:

Commencing CoreCLR Repo build
Checking pre-requisites...
Commencing build of native components for amd64/debug
Invoking cmake with arguments: /data/git/coreclr DEBUG
Detected Linux x86_64
-- Configuring done
-- Generating done
-- Build files have been written to: /data/git/coreclr/binaries/CMake
Executing make
[  0%] Building CXX object src/pal/src/CMakeFiles/CoreClrPal.dir/exception/seh.cpp.o
In file included from /data/git/coreclr/src/pal/src/exception/seh.cpp:22:
In file included from /usr/bin/../lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/typeinfo:34:
In file included from /usr/bin/../lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/exception:148:
/usr/bin/../lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/exception_ptr.h:143:13: error: unknown type
      name 'type_info'
      const type_info*
            ^
1 error generated.
make[2]: *** [src/pal/src/CMakeFiles/CoreClrPal.dir/exception/seh.cpp.o] Error 1
make[1]: *** [src/pal/src/CMakeFiles/CoreClrPal.dir/all] Error 2
make: *** [all] Error 2
Failed to build coreclr components.

【更新】

>>Build日期:2015-2-5晚上(编译成功)。

后来,将遇到的这个问题在github coreclr issue #77中提交了一下,很快有人回复编译器只能用clang 3.5。

看了一下CentOS安装的最新版clang是clang 3.4.2,看来是这个问题引起的。

要到LLVM官网上一看,预编译好的clang 3.5有Ubuntu的版本,但没有CentOS的。

于是,干脆将操作系统换成Ubuntu。在Ubuntu上用apt-get install clang安装,也是clang 3.4,只有手动安装clang 3.5。

手动安装参考的是园子里的这篇博文:在 Linux 下使用 clang 3.0 + llvm 3.0 + libc++

在Ubuntu中编译CoreCLR的实际操作步骤如下:

1)安装cmake: apt-get install cmake 

2)下载预编译好的clang 3.5: wget http://llvm.org/releases/3.5.0/clang+llvm-3.5.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz 

3)解压下载好的clang 3.5压缩包: tar xvf clang+llvm-3.5.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz 

4)进入解压后的文件夹: cd clang+llvm-3.5.0-x86_64-linux-gnu 

5)复制其中的文件至/usr: cp -R * /usr 

6)编译CoreCLR: sh build.sh 

7)等待编译结果:

Commencing CoreCLR Repo build
build.sh: 101: build.sh: Bad substitution
build.sh: 161: [: false: unexpected operator
Checking pre-requisites...
Commencing build of native components for amd64/debug
Invoking cmake with arguments: /data/git/coreclr DEBUG
Detected Linux x86_64
-- Configuring done
-- Generating done
-- Build files have been written to: /data/git/coreclr/binaries/CMake
Executing make
[  0%] Building CXX object src/pal/src/CMakeFiles/CoreClrPal.dir/exception/seh.cpp.o
...

结果。。。编译成功了!

[100%] Built target mscordaccore
Install the project...
-- Install configuration: "DEBUG"
-- Installing: /data/git/coreclr/binaries/Product/amd64/debug/./corerun
-- Installing: /data/git/coreclr/binaries/Product/amd64/debug/./libmscordaccore.so
-- Installing: /data/git/coreclr/binaries/Product/amd64/debug/./libcoreclr.so
Repo successfully built.
Product binaries are available at /data/git/coreclr/binaries/Product/amd64/debug

耶!大功告成!

/data/git/coreclr/binaries/Product/amd64/debug# ls
corerun  libcoreclr.so  libmscordaccore.so

【补充】

GitHub上已经有了专门的参考资料:Building and Running CoreCLR on Linux

posted @ 2015-02-05 18:20 dudu 阅读(...) 评论(...) 编辑 收藏