19 December 2012
First, Centos 5.8 ships with gcc 4.1.4, but to compile libv8 you need 4.4. Luckily, this step is easy:
$ yum install gcc44-c++
Next, you need to tell the build to make use of it. The easiest thing to do here, is to export a couple of environment variables:
$ export CC=/usr/bin/gcc44 $ export CXX=/usr/bin/g++44
Now if you attempt gem install libv8, you will get an error along the lines of:
$ gem install libv8 creating Makefile Using compiler: /usr/bin/g++44 Traceback (most recent call last): File "build/gyp/gyp", line 15, in ? import gyp File "build/gyp/pylib/gyp/__init__.py", line 8, in ? import gyp.input File "build/gyp/pylib/gyp/input.py", line 14, in ? import gyp.common File "build/gyp/pylib/gyp/common.py", line 375 with open(source_path) as source_file: ^ SyntaxError: invalid syntax gmake: *** [out/Makefile.x64] Error 1 GYP_GENERATORS=make \ build/gyp/gyp --generator-output="out" build/all.gyp \ -Ibuild/standalone.gypi --depth=. \ -Dv8_target_arch=x64 \ -S.x64 -Dhost_arch=x64
This is because the version of Python that is shipped with Centos is too old. Upgrading Python is not too hard, but be warned - do not under any circumstance replace the shipped Centos Python - lots of stuff depends on it, and it you replace it, lots of stuff will break.
To install Python 2.7:
$ yum install bzip2 $ yum install bzip2-devel $ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz $ tar -xf Python-2.7.3.tgz $ cd Python-2.7.3 $ ./configure $ make $ make altinstall
The final step is very important - this stops it overwriting the default Centos Python. We are on the home straight now. To get the libv8 install to use Python 2.7 instead of Python 2.4, I thought I could create a symlink in my local directory, and then slip my local directory onto the front of my path:
$ ln -s /usr/local/bin/python2.7 python $ export PATH=.:$PATH $ python --version Python 2.7.3
However, that didn't work.
I don't know why - maybe the Makefile explicitly references /usr/bin/python? What I did was move the existing Python executable out of the way, and symlink the Python 2.7 in its place:
$ mv /usr/bin/python /usr/bin/python_ $ ln -s /usr/local/bin/python2.7 /usr/bin/python
$ gem install libv8 ( about 5 minutes later) Building native extensions. This could take a while... Successfully installed libv8-126.96.36.199 1 gem installed Installing ri documentation for libv8-188.8.131.52... Installing RDoc documentation for libv8-184.108.40.206...
Now remember, to put Python back the way you found it:
$ rm /usr/bin/python $ mv /usr/bin/python_ /usr/bin/python
Job done - finally.