首頁 > 軟體

在Linux CentOS上編譯CoreCLR

2020-06-16 18:01:42

經過幾天的努力,終於解決了在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

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-04/116595.htm


IT145.com E-mail:sddin#qq.com