Costas wrote:
> 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.
>   
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.
>
>