37
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linuxbrew on CentOS 6 で system の gcc を使用する方法

Posted at

tl;dr

symbolic_link_gcc_version.sh
#! /bin/bash

target_files="c++ cpp g++ gcc x86_64-redhat-linux-c++ x86_64-redhat-linux-g++ x86_64-redhat-linux-gcc"

gcc_version=`gcc -dumpversion | cut -d. -f1,2`

if [[ -z "$gcc_version" ]]; then
    echo "Don't get GCC version."
    exit 1
fi

if [[ -x `which brew` ]]; then
    brew_prefix_dir=`brew --prefix`
    for target_file in $target_files; do
        target_path=`which $target_file`
        link_path=${brew_prefix_dir}/bin/${target_file}-${gcc_version}
        if [[ -x $target_path && ! -e $link_path ]]; then
            ln -s -v $target_path $link_path
        fi
    done
fi

上記のファイルを作って実行すればおけ。

$ ./symbolic_link_gcc_version.sh
`/home/example/.linuxbrew/bin/c++-4.4' -> `/usr/bin/c++'
`/home/example/.linuxbrew/bin/cpp-4.4' -> `/usr/bin/cpp'
`/home/example/.linuxbrew/bin/g++-4.4' -> `/usr/bin/g++'
`/home/example/.linuxbrew/bin/gcc-4.4' -> `/usr/bin/gcc'
`/home/example/.linuxbrew/bin/x86_64-redhat-linux-c++-4.4' -> `/usr/bin/x86_64-redhat-linux-c++'
`/home/example/.linuxbrew/bin/x86_64-redhat-linux-g++-4.4' -> `/usr/bin/x86_64-redhat-linux-g++'
`/home/example/.linuxbrew/bin/x86_64-redhat-linux-gcc-4.4' -> `/usr/bin/x86_64-redhat-linux-gcc'

What's Linuxbrew

"A fork of Homebrew for Linux" by Linuxbrew というわけで OS X の Homebrew を Linux 環境でも使えるようにしたものです。とても便利。

何が起きたの?

CentOS 6.4 で Linuxbrew を快適に使用していたところ、あるときから突然…

$ brew install lv
Error: lv cannot be built with any available compilers.
To install this formula, you may need to:
  brew install gcc

ってなってしまったのでした。

ちなみに素直に brew install gcc すると…

$ brew install gcc
==> Installing dependencies for gcc: gmp, mpfr, libmpc, isl, cloog
==> Installing gcc dependency: gmp
Error: gmp cannot be built with any available compilers.
To install this formula, you may need to:
  brew install gcc

gcc が使えないので gcc の make に必要な package も当然 install できないという悲しい現実。

どうしてこうなった

"gcc-4\.[3-9]" というファイルがあるかどうかで gcc の存在確認をしているためだと思われる。

詳細は検証していないけど Replace CompilerQueue with predetermined priority lists という 2014/09/19 辺りの commit の結果っぽい。

解決策

とにかく gcc があることを認識してもらえばいいので Standalone Installation of Linuxbrew にある Create symlinks for gcc を参考に ~/.linuxbrew/bin に gcc-4.4 といった symbolic link を作れば良い。

まず gcc の version を調べる。

$ gcc -dumpversion
4.4.7

だとしたら

$ ln -s `which gcc` `brew --prefix`/bin/gcc-4.4

これで解決。

上記した script では念の為 gcc 以外の cpp, g++ あたりも同様の処理しています。

Plan B

Standalone Installation of Linuxbrew ← system の gcc の力を借りて、結果的に Linuxbrew 自体で gcc を入れてしまう方法もアリ。

一応実際に試してみたけど、$HOME/.linuxbrew がとても大きい(一通り入れて 1.1GB ほど)ことになってしまい切ない。

See Also

37
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?