From: Costas Date: 2007-05-29T05:50:13+09:00 Subject: Re: Installing 1.8.6 from source on RHEL4 x86_64 On May 28, 11:05 am, "M. Edward (Ed) Borasky" wrote: > Costas wrote: > > On May 25, 4:54 pm, "M. Edward (Ed) Borasky" wrote: > > >> Costas wrote: > > >>> On May 24, 1:11 pm, Costas wrote: > > >>>> I've been fiddling with installing each of the stable snapshot and the > >>>> 1.8.6 build on the Download Ruby page and it barfs on me. > > >>>> I'm running RHEL4 onx86_64( Red Hat Enterprise Linux AS release 4 > >>>> (Nahant Update 4) ) - Linux 2.6.9-42.0.2.ELsmp #1 SMP Thu Aug 17 > >>>> 17:57:31 EDT 2006x86_64x86_64x86_64GNU/Linux > > >>>> I run the configure script, and then make. > > >>>> When building it, it seems to trip on bigdecimal: > > >>>> make[1]: Entering directory `/data/db2home/dw/ruby-1.8.6/ext/ > >>>> bigdecimal' > >>>> gcc -I. -I../.. -I../../. -I../.././ext/bigdecimal -fPIC -g -O2 -c > >>>> bigdecimal.c > >>>> gcc -shared -rdynamic -Wl,-export-dynamic -L'../..' -o ../../.ext/x86_64-linux/bigdecimal.so bigdecimal.o -lcrypt -lm -lc > >>>> /usr/bin/ld: /opt/usr/bin/../lib/gcc/x86_64-redhat-linux/ > >>>> 3.4.6/../../../../lib64/libm.a(k_standard.o): relocation R_X86_64_32S > >>>> against `a local symbol' can not be used when making a shared object; > >>>> recompile with -fPIC > >>>> /opt/usr/bin/../lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/ > >>>> libm.a: could not read symbols: Bad value > >>>> collect2: ld returned 1 exit status > >>>> make[1]: *** [../../.ext/x86_64-linux/bigdecimal.so] Error 1 > >>>> make[1]: Leaving directory `/data/db2home/dw/ruby-1.8.6/ext/ > >>>> bigdecimal' > >>>> make: *** [all] Error 1 > > >>>> Here's the output of ./configure: > > >>>> checking build system type...x86_64-unknown-linux-gnu > >>>> checking host system type...x86_64-unknown-linux-gnu > >>>> checking target system type...x86_64-unknown-linux-gnu > >>>> checking for gcc... gcc > >>>> checking for C compiler default output file name... a.out > >>>> checking whether the C compiler works... yes > >>>> checking whether we are cross compiling... no > >>>> checking for suffix of executables... > >>>> checking for suffix of object files... o > >>>> checking whether we are using the GNU C compiler... yes > >>>> checking whether gcc accepts -g... yes > >>>> checking for gcc option to accept ISO C89... none needed > >>>> checking how to run the C preprocessor... gcc -E > >>>> checking for grep that handles long lines and -e... /bin/grep > >>>> checking for egrep... /bin/grep -E > >>>> checking whether gcc needs -traditional... no > >>>> checking whether the linker is GNU ld... yes > >>>> checking whether gcc -E accepts -o... yes > >>>> checking for bison... bison -y > >>>> checking for ranlib... ranlib > >>>> checking for ar... ar > >>>> checking for as... as > >>>> checking whether ln -s works... yes > >>>> checking whether make sets $(MAKE)... yes > >>>> checking for a BSD-compatible install... /usr/bin/install -c > >>>> checking for AIX... no > >>>> checking for ANSI C header files... yes > >>>> checking for sys/types.h... yes > >>>> checking for sys/stat.h... yes > >>>> checking for stdlib.h... yes > >>>> checking for string.h... yes > >>>> checking for memory.h... yes > >>>> checking for strings.h... yes > >>>> checking for inttypes.h... yes > >>>> checking for stdint.h... yes > >>>> checking for unistd.h... yes > >>>> checking minix/config.h usability... no > >>>> checking minix/config.h presence... no > >>>> checking for minix/config.h... no > >>>> checking for special C compiler options needed for large files... no > >>>> checking for _FILE_OFFSET_BITS value needed for large files... no > >>>> checking for long long... yes > >>>> checking for off_t... yes > >>>> checking for int... yes > >>>> checking size of int... 4 > >>>> checking for short... yes > >>>> checking size of short... 2 > >>>> checking for long... yes > >>>> checking size of long... 8 > >>>> checking for long long... (cached) yes > >>>> checking size of long long... 8 > >>>> checking for __int64... no > >>>> checking size of __int64... 0 > >>>> checking for off_t... (cached) yes > >>>> checking size of off_t... 8 > >>>> checking for void*... yes > >>>> checking size of void*... 8 > >>>> checking for float... yes > >>>> checking size of float... 4 > >>>> checking for double... yes > >>>> checking size of double... 8 > >>>> checking for time_t... yes > >>>> checking size of time_t... 8 > >>>> checking for pid_t... yes > >>>> checking for gid_t... yes > >>>> checking for uid_t... yes > >>>> checking for prototypes... yes > >>>> checking token paste string... ansi > >>>> checking for variable length prototypes and stdarg.h... yes > >>>> checking for noreturn function attribute... __attribute__ ((noreturn)) > >>>> x > >>>> checking for noinline function attribute... __attribute__ ((noinline)) > >>>> x > >>>> checking for RUBY_EXTERN... no > >>>> checking whether sys_nerr is declared... yes > >>>> checking for crypt in -lcrypt... yes > >>>> checking for dlopen in -ldl... no > >>>> checking for shl_load in -ldld... no > >>>> checking for dirent.h that defines DIR... yes > >>>> checking for library containing opendir... none required > >>>> checking for ANSI C header files... (cached) yes > >>>> checking for sys/wait.h that is POSIX.1 compatible... yes > >>>> checking for stdlib.h... (cached) yes > >>>> checking for string.h... (cached) yes > >>>> checking for unistd.h... (cached) yes > >>>> checking limits.h usability... yes > >>>> checking limits.h presence... yes > >>>> checking for limits.h... yes > >>>> checking sys/file.h usability... yes > >>>> checking sys/file.h presence... yes > >>>> checking for sys/file.h... yes > >>>> checking sys/ioctl.h usability... yes > >>>> checking sys/ioctl.h presence... yes > >>>> checking for sys/ioctl.h... yes > >>>> checking sys/syscall.h usability... yes > >>>> checking sys/syscall.h presence... yes > >>>> checking for sys/syscall.h... yes > >>>> checking fcntl.h usability... yes > >>>> checking fcntl.h presence... yes > >>>> checking for fcntl.h... yes > >>>> checking sys/fcntl.h usability... yes > >>>> checking sys/fcntl.h presence... yes > >>>> checking for sys/fcntl.h... yes > >>>> checking sys/select.h usability... yes > >>>> checking sys/select.h presence... yes > >>>> checking for sys/select.h... yes > >>>> checking sys/time.h usability... yes > >>>> checking sys/time.h presence... yes > >>>> checking for sys/time.h... yes > >>>> checking sys/times.h usability... yes > >>>> checking sys/times.h presence... yes > >>>> checking for sys/times.h... yes > >>>> checking sys/param.h usability... yes > >>>> checking sys/param.h presence... yes > >>>> checking for sys/param.h... yes > >>>> checking syscall.h usability... yes > >>>> checking syscall.h presence... yes > >>>> checking for syscall.h... yes > >>>> checking pwd.h usability... yes > >>>> checking pwd.h presence... yes > >>>> checking for pwd.h... yes > >>>> checking grp.h usability... yes > >>>> checking grp.h presence... yes > >>>> checking for grp.h... yes > >>>> checking a.out.h usability... yes > >>>> checking a.out.h presence... yes > >>>> checking for a.out.h... yes > >>>> checking utime.h usability... yes > >>>> checking utime.h presence... yes > >>>> checking for utime.h... yes > >>>> checking for memory.h... (cached) yes > >>>> checking direct.h usability... no > >>>> checking direct.h presence... no > >>>> checking for direct.h... no > >>>> checking sys/resource.h usability... yes > >>>> checking sys/resource.h presence... yes > >>>> checking for sys/resource.h... yes > >>>> checking sys/mkdev.h usability... no > >>>> checking sys/mkdev.h presence... no > >>>> checking for sys/mkdev.h... no > >>>> checking sys/utime.h usability... no > >>>> checking sys/utime.h presence... no > >>>> checking for sys/utime.h... no > >>>> checking netinet/in_systm.h usability... yes > >>>> checking netinet/in_systm.h presence... yes > >>>> checking for netinet/in_systm.h... yes > >>>> checking float.h usability... yes > >>>> checking float.h presence... yes > >>>> checking for float.h... yes > >>>> checking ieeefp.h usability... no > >>>> checking ieeefp.h presence... no > >>>> checking for ieeefp.h... no > >>>> checking pthread.h usability... yes > >>>> checking pthread.h presence... yes > >>>> checking for pthread.h... yes > >>>> checking ucontext.h usability... yes > >>>> checking ucontext.h presence... yes > >>>> checking for ucontext.h... yes > >>>> checking intrinsics.h usability... no > >>>> checking intrinsics.h presence... no > >>>> checking for intrinsics.h... no > >>>> checking for rlim_t... yes > >>>> checking size of rlim_t... 8 > >>>> checking for size_t... yes > >>>> checking for struct stat.st_blksize... yes > >>>> checking for struct stat.st_blocks... yes > >>>> checking for struct stat.st_rdev... yes > >>>> checking for uid_t in sys/types.h... (cached) yes > >>>> checking type of array argument to getgroups... gid_t > >>>> checking return type of signal handlers... void > >>>> checking for working alloca.h... yes > >>>> checking for alloca... yes > >>>> checking for working memcmp... yes > >>>> checking for _LARGEFILE_SOURCE value needed for large files... 1 > >>>> checking for ftello... yes > >>>> checking for dup2... yes > >>>> checking for memmove... yes > >>>> checking for strcasecmp... yes > >>>> checking for strncasecmp... yes > >>>> checking for strerror... yes > >>>> checking for strftime... yes > >>>> checking for strchr... yes > >>>> checking for strstr... yes > >>>> checking for strtoul... yes > >>>> checking for crypt... yes > >>>> checking for flock... yes > >>>> checking for vsnprintf... yes > >>>> checking for isnan... yes > >>>> checking for finite... yes > >>>> checking for isinf... yes > >>>> checking for hypot... yes > >>>> checking for acosh... yes > >>>> checking for erf... yes > >>>> checking for fmod... yes > >>>> checking for killpg... yes > >>>> checking for wait4... yes > >>>> checking for waitpid... yes > >>>> checking for syscall... yes > >>>> checking for chroot... yes > >>>> checking for fsync... yes > >>>> checking for getcwd... yes > >>>> checking for eaccess... no > >>>> checking for truncate... yes > >>>> checking for chsize... no > >>>> checking for times... yes > >>>> checking for utimes... yes > >>>> checking for fcntl... yes > >>>> checking for lockf... yes > >>>> checking for lstat... yes > >>>> checking for symlink... yes > >>>> checking for link... yes > >>>> checking for readlink... yes > >>>> checking for setitimer... yes > >>>> checking for setruid... no > >>>> checking for seteuid... yes > >>>> checking for setreuid... yes > >>>> checking for setresuid... yes > >>>> checking for setproctitle... no > >>>> checking for setrgid... no > >>>> checking for setegid... yes > >>>> checking for setregid... yes > >>>> checking for setresgid... yes > >>>> checking for issetugid... no > >>>> checking for pause... yes > >>>> checking for lchown... yes > >>>> checking for lchmod... no > >>>> checking for getpgrp... yes > >>>> checking for setpgrp... yes > >>>> checking for getpgid... yes > >>>> checking for setpgid... yes > >>>> checking for initgroups... yes > >>>> checking for getgroups... yes > >>>> checking for setgroups... yes > >>>> checking for getpriority... yes > >>>> checking for getrlimit... yes > >>>> checking for setrlimit... yes > >>>> checking for sysconf... yes > >>>> checking for dlopen... no > >>>> checking for sigprocmask... yes > >>>> checking for sigaction... yes > >>>> checking for _setjmp... yes > >>>> checking for setsid... yes > >>>> checking for telldir... yes > >>>> checking for seekdir... yes > >>>> checking for fchmod... yes > >>>> checking for mktime... yes > >>>> checking for timegm... yes > >>>> checking for cosh... yes > >>>> checking for sinh... yes > >>>> checking for tanh... yes > >>>> checking for setuid... yes > >>>> checking for setgid... yes > >>>> checking for setenv... yes > >>>> checking for unsetenv... yes > >>>> checking whether struct tm is in sys/time.h or time.h... time.h > >>>> checking for struct tm.tm_zone... yes > >>>> checking for struct tm.tm_gmtoff... yes > >>>> checking for external int daylight... yes > >>>> checking for negative time_t for gmtime(3)... yes > >>>> checking... > > >>>> read more � > > >>> Bump - please - anybody? Help? > > >> The only obvious thing that I see is > > >> gcc -shared -rdynamic -Wl,-export-dynamic -L'../..' -o ../../.ext/x86_64-linux/bigdecimal.so bigdecimal.o -lcrypt -lm -lc > >> /usr/bin/ld: /opt/usr/bin/../lib/gcc/x86_64-redhat-linux/ > >> 3.4.6/../../../../lib64/libm.a(k_standard.o): relocation R_X86_64_32S > >> against `a local symbol' can not be used when making a shared object; > >> recompile with -fPIC > > >> It looks like some kind of incompatibility between a system library and bigdecimal. Try taking the '-fPIC' off of "CFLAGS" in your Makefiles and see if that helps. > > >> I do know that Ruby 1.8.6 compiles, etc., flawlessly on my Gentoo AMD64 system, but I have gcc 4.1.2, not 3.4.6. You could also try an upgrade to RHEL 5 to see if it goes away. > > > Thanks for the info - actually that flag though wasn't on. It's > > weird because it compiles fine on an older RHEL4 box but not a newer > > one... It's unusual that's the case. > > Are you saying that it works on one RHEL4/x86_64 box and not the other, > or that it works on an RHEL4/x86(32) box but not on an RHEL/x86_64 box? > > I'll be loading CentOS 5 on an x64 system later this week, and it comes > with Ruby 1.8.5, so I know at least that works. You could try getting > the source RPMs for Ruby and its friends from the RHEL 5 source > repository and doing an "rpmbuild" ... that would tell you if there are > special hacks you need to do to bring Ruby up on your box. Works on one both x86_64, both RHEL4, the one more current is where the build breaks. Go figure eh... Well 1.8.5 for CentOS 4 worked like a charm. Argh! Go figure...