LoginSignup
5
4

More than 5 years have passed since last update.

CentOS6でnode.js v4のネイティブコードモジュールがコンパイルできない件

Posted at

きっかけ

node.jsで新規で開発するプロジェクト
既存はv0.12.xだったのですがそろそろ新しい構文も使いたいし、いい加減にv4ぐらいには移行しとかないとなあ・・・と
で、手元のCentOS 6.xなマシンにnode.js v4をnvmでインストール

package.jsonはあるのでプロジェクトの依存パッケージをnpm install・・・したらコケた

iconvなどのネイティブコードを扱うモジュールのコンパイルが一部失敗していて、調べたらg++のバージョン古すぎる(C++11/14あたりをサポートしてない)というのが問題らしい
気になる現在のバージョンは

$ g++ -v
()
gcc version 4.4.7

・・・node.jsだけじゃなくC++も新しくしないとそろそろ苦しいな
とはいえCentOS6のホストにDockerなどでCentOS7ゲストはsystemd周りで別な地雷を踏みそう
じゃあこのマシンをまるっとCentOS7にしろっていうのももうしばらくは避けたい

Developer Toolset

RedHatも10年も続くRHELのサポート期間と開発関係のツールチェーンの進歩との整合性をとるべくSoftware Collectionsとビルド関連のDeveloper Toolsetをまとめてくれている
CentOSにもTru HuynhさんがDevtools-2をポーティングしてくれているのでありがたく使わせてもらうことにする

$ sudo wget http://people.centos.org/tru/devtools-2/devtools-2.repo
$ sudo yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++

さてインストールはできたものの、インストール先は

/opt/rh/devtoolset-2/root/usr/bin/gcc
/opt/rh/devtoolset-2/root/usr/bin/g++

でこのままだとパスが通ってない

$ scl enable devtoolset-2 bash

で一時的にパスを通して有効にする

$ g++ -v
()
gcc version 4.8.2 20140120 (Red Hat 4.8.2-15) (GCC) 

この状態で npm install もつつがなく完了

もうこっちしか使わないよって場合は /opt/rh/devtoolset-2/enable を .bash_profile あたりに追加しておけばいいはず
私はこの構成にしたDockerイメージを作ってやりくりすることにした

5
4
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
5
4