On May 25, 4:54 pm, "M. Edward (Ed) Borasky" <z... / cesmail.net> wrote:
> Costas wrote:
> > On May 24, 1:11 pm, Costas <c_pilio... / yahoo.com> 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.