zoukankan      html  css  js  c++  java
  • 在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
  • 相关阅读:
    SAP MM 采购附加费计入物料成本之二
    SAP MM 采购附加费计入物料成本?
    SAP MM 作为采购附加费的运费为啥没能在收货的时候计入物料成本?
    SAP MM 外部采购流程里的Advanced Return Management
    SAP MM 外部采购流程里的如同鸡肋一样的Advanced Returns Management功能
    SAP MM Why is the freight not included in the material cost at the time of GR?
    SAP MM: Change of material moving average price after goods receipt and invoice verification posting for PO
    SAP 创建启用了ARM功能的采购订单,报错 Shipping processing is not selected to supplier 100057 in purchase org. 0002
    GIT·代码仓库默认分支更改
    .Net/C#·运行报错缺少XXX文件,但双击无法跳转缺少位置
  • 原文地址:https://www.cnblogs.com/dudu/p/build-coreclr-on-centos.html
Copyright © 2011-2022 走看看