15 July 2011
Building ruby 1.8.7 with glibc 2.14
It seems that there's a bug which means that ruby 1.8.7 and ruby enterprise edition 1.8.7 don't build with glibc 2.14:
/bin/sh ./libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I./src -I./src -DNO_TCMALLOC_SAMPLES -pthread -DNDEBUG -Wall -Wwrit
e-strings -Woverloaded-virtual -Wno-sign-compare -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-c
free -fno-builtin-memalign -fno-builtin-posix_memalign -fno-builtin-valloc -fno-builtin-pvalloc -DNO_FRAME_POINTER -g -O2 -c -o libtcmalloc_m
inimal_la-tcmalloc.lo `test -f 'src/tcmalloc.cc' || echo './'`src/tcmalloc.cc
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I. -I./src -I./src -DNO_TCMALLOC_SAMPLES -pthread -DNDEBUG -Wall -Wwrite-strings -Woverloaded-virt
ual -Wno-sign-compare -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-cfree -fno-builtin-memalign
-fno-builtin-posix_memalign -fno-builtin-valloc -fno-builtin-pvalloc -DNO_FRAME_POINTER -g -O2 -c src/tcmalloc.cc -fPIC -DPIC -o .libs/libtcm
alloc_minimal_la-tcmalloc.o
src/tcmalloc.cc:1672:54: error: conflicting declaration ‘void* (* __memalign_hook)(size_t, size_t, const void*)’
/usr/include/malloc.h:183:39: error: ‘__memalign_hook’ has a previous declaration as ‘void* (* volatile __memalign_hook)(size_t, size_t, const
void*)’
make: *** [libtcmalloc_minimal_la-tcmalloc.lo] Error 1
While those that understand this sort of thing sort it out, there's a workaround posted on github. Here are the instructions (for ree):
- Run
rvm install ree-1.8.7 - Wait for it to fail.
Fix the broken files with:
% cd ~/.rvm/src/ree-1.8.7-2011.03/source/ext/dl
% rm callback.func
% touch callback.func
% ruby mkcallback.rb >> callback.func
% rm cbtable.func
% touch cbtable.func
% ruby mkcbtable.rb >> cbtable.func
Re-run
rvm install reeand the ruby files will not be re-extracted, so your changes tocallback.funcandcbtable.funcwill persist.
Categories:
All articles
Ruby