首页 / 操作系统 / Linux / 在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.xzmv llvm-3.5.0.src llvm2)下载clang的源代码cd llvm/toolswget http://llvm.org/releases/3.5.0/cfe-3.5.0.src.tar.xztar xf cfe-3.5.0.src.tar.xzmv cfe-3.5.0.src clang2+)下载lldb的源代码及安装相关组件wget http://llvm.org/releases/3.5.0/lldb-3.5.0.src.tar.xztar -xf lldb-3.5.0.src.tar.xzmv lldb-3.5.0.src lldbyum install swig python-devel libedit-devel3)下载compiler-rt的源代码cd ../projectswget http://llvm.org/releases/3.5.0/compiler-rt-3.5.0.src.tar.xztar xf compiler-rt-3.5.0.src.tar.xzmv compiler-rt-3.5.0.src compiler-rt4)下载libcxxabi的源代码wget http://llvm.org/releases/3.5.0/libcxxabi-3.5.0.src.tar.xztar -xf libcxxabi-3.5.0.src.tar.xzmv libcxxabi-3.5.0.src.tar.xz libcxxabi5)下载libcxx的源代码wget http://llvm.org/releases/3.5.0/libcxx-3.5.0.src.tar.xztar xflibcxx-3.5.0.src.tar.xzmv libcxx-3.5.0.src libcxx6)配置编译选项cd .../configure --enable-optimized CC=gcc CXX=g++7)编译llvmmake -j28)安装编译好的llvmmake install(如果只安装lldb,只需进入llvm/tools/lldb中运行make install)9)签出CoreClr的源代码进行编译git clone https://github.com/dotnet/coreclr.gitcd coreclr./build.sh10)安装libunwindwget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gztar -xf libunwind-1.1.tar.gzcd libunwind-1.1./configuremakemake install如果不安装libunwind会出现下面的错误:/data/git/coreclr/src/pal/src/exception/seh-unwind.cpp:32:10: fatal error: "libunwind.h" file not found10)解决"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.oIn 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更多CentOS相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14本文永久更新链接地址