在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")”,就能编译了。

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

所用的CentOS版本7.0。

1)下载llvm的源代码

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

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

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

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

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") 可以解决这个问题。

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") 可以解决这个问题。

11)大功告成

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。