From: Costas Date: 2007-05-29T02:50:07+09:00 Subject: Re: Installing 1.8.6 from source on RHEL4 x86_64 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.