2017年8月3日木曜日

clang 6.0.0をソースビルドしてインストール

久々に作業を行ったので記録として残しておきます。

試用環境はUbuntu16.04.2LTSです。
デフォルトのClangは3.8でした。

まずソースをリポジトリより取得します。
$ mkdir clang
$ cd clang
$ sudo apt-get build-dep -y llvm clang
$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm$ cd llvm/tools
$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
$ cd clang/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
$ cd ../../../projects
$ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
$ cd ../..

 ビルド用のディレクトリを作成してcmakeでMakefile作成し、ビルドします
$ mkdir llvm.build
$ cd llvm.build
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ../llvm
$ make

ビルドが私のマシンが非力なのか大体8時間15分ほど時間がかかりました。寝る前に流して朝起きるとまだビルドが75%程で仕方ないのでそのままPCをつけたまま出かけました。

さて動作確認です。

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.23' not found (required by <new software>)

あれ?どうやらライブラリがないと言われている様です。

現在のライブラリを以下のコマンドで確認すると確かに該当バージョンが含まれていません。
 $ strings /usr/lib/x86_64-linux-gnu/libstdc;;.so.6 | grep GLIBCXX

調べるとそのライブラリはgccをビルドすると含まれているそうです。
よかったこの間gcc7.1.0をビルドしたばかりで既にビルドした物が手元にあります。

$ cd gcc/build
$ find ./ -name "libstdc++*"
"./x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.23"


このファイルのようです。


現在の環境のものをリネームしてこのファイルに置き換える作業をします。
 $ sudo cp ./x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.23 /usr/lib/x86_64-linux-gnu/


 $ sudo cp libstdc++.so.6.0.23
 $ sudo mv libstdc++.so.6 libstdc++.so.6.bak
 $ sudo ln -s libstdc++.so.6.0.23 libstdc++.so.
 $ ls -lsta libstdc++*

権限を他のものと揃えて終わります。
 $ sudo chmod 644 libstdc++.so.6.0.23

これで一応clangが動作するようになりました。

1 件のコメント: