From: "M. Edward (Ed) Borasky" Date: 2007-05-26T08:54:16+09:00 Subject: Re: Installing 1.8.6 from source on RHEL4 x86_64 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.