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