Project

General

Profile

Bug #10906

Problem building on Solaris 10 - symbol rb_infinity not found

Added by djberg96 (Daniel Berger) almost 6 years ago. Updated about 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0
[ruby-core:68318]

Description

Hi,

Solaris 10
gcc 4.8
ruby 2.2.0 current stable

I did configure/make, and it works until it tries to generate rdoc:

Generating RDoc documentation
/export/home/djberge/Downloads/Ruby/ruby-2.2.0/.ext/common/date.rb:3:in `require': ld.so.1: ruby: fatal: relocation error: file /export/home/djberge/Downloads/Ruby/ruby-2.2.0/.ext/i386-solaris2.10/date_core.so: symbol rb_infinity: referenced symbol not found - /export/home/djberge/Downloads/Ruby/ruby-2.2.0/.ext/i386-solaris2.10/date_core.so (LoadError)
    from /export/home/djberge/Downloads/Ruby/ruby-2.2.0/.ext/common/date.rb:3:in `<top (required)>'
    from /export/home/djberge/Downloads/Ruby/ruby-2.2.0/lib/time.rb:1:in `require'
    from /export/home/djberge/Downloads/Ruby/ruby-2.2.0/lib/time.rb:1:in `<top (required)>'
    from /export/home/djberge/Downloads/Ruby/ruby-2.2.0/lib/rdoc/rdoc.rb:6:in `require'
    from /export/home/djberge/Downloads/Ruby/ruby-2.2.0/lib/rdoc/rdoc.rb:6:in `<top (required)>'
    from ./bin/rdoc:16:in `require'
    from ./bin/rdoc:16:in `<main>'

make: *** [rdoc] Error 1

Updated by ngoto (Naohisa Goto) almost 6 years ago

  • Status changed from Open to Feedback

Could you please show configure options and environment variables,
and execute the following commands and show results?

% /usr/ccs/bin/nm numeric.o | grep infinity
% /usr/ccs/bin/nm .ext/i386-solaris2.10/date_core.so | grep infinity

Updated by djberg96 (Daniel Berger) almost 6 years ago

I didn't send any options to configure.

/usr/ccs/bin/nm numeric.o | grep infinity
/usr/ccs/bin/nm .ext/i386-solaris2.10/date_core.so | grep infinity
[1620] | 0| 0|NOTY |GLOB |0 |UNDEF |rb_infinity

env
LDFLAGS=-R/usr/local/lib -R/opt/csw/lib -R/opt/csw/gcc4/lib
MANPATH=/usr/dt/man:/usr/man:/usr/openwin/share/man:/opt/csw/man:/usr/local/man:/opt/csw/man:/usr/local/man
DTSOURCEPROFILE=true
SHELL=/usr/bin/bash
TERM=dtterm
WINDOWID=54526077
OLDPWD=/export/home/djberge/Downloads/Ruby/ruby-2.2.0/ext
DTHELPSEARCHPATH=/export/home/djberge/.dt/help/djberge-unknown-0/%H:/export/home/djberge/.dt/help/djberge-unknown-0/%H.sdl:/export/home/djberge/.dt/help/djberge-unknown-0/%H.hv:/export/home/djberge/.dt/help/%H:/export/home/djberge/.dt/help/%H.sdl:/export/home/djberge/.dt/help/%H.hv:/usr/dt/appconfig/help/%L/%H:/usr/dt/appconfig/help/%L/%H.sdl:/usr/dt/appconfig/help/%L/%H.hv:/usr/dt/appconfig/help/C/%H:/usr/dt/appconfig/help/C/%H.sdl:/usr/dt/appconfig/help/C/%H.hv
DTDEVROOT=
USER=djberge
LD_LIBRARY_PATH=/opt/csw/lib:/usr/local/lib/lib:/usr/lib:/usr/ucblib
OPENWINHOME=/usr/openwin
DTXSERVERLOCATION=local
XMBINDDIR=/usr/dt/lib/bindings
SESSION_SVR=unknown
HELPPATH=/usr/openwin/lib/locale:/usr/openwin/lib/help
PATH=/usr/local/bin:/opt/local/bin:/usr/bin:/usr/dt/bin:/usr/openwin/bin:/usr/ucb:/opt/solstudio12.2/bin:/opt/csw/bin:/usr/ccs/bin:/usr/sbin:/usr/local/bin:/opt/bin:/opt/csw/gcc4/bin:/usr/local/jruby/bin:/usr/xpg4/bin:/usr/local/bin:/opt/local/bin:/opt/solstudio12.2/bin:/opt/csw/bin:/usr/ccs/bin:/usr/sbin:/usr/local/bin:/opt/bin:/opt/csw/gcc4/bin:/usr/local/jruby/bin:/usr/xpg4/bin:/usr/local/bin:/opt/local/bin
MAIL=/usr/mail/djberge
TERMINAL_EMULATOR=dtterm
PWD=/export/home/djberge/Downloads/Ruby/ruby-2.2.0
EDITOR=/usr/dt/bin/dtpad
LANG=C
DTAPPSEARCHPATH=/export/home/djberge/.dt/appmanager:/usr/dt/appconfig/appmanager/%L:/usr/dt/appconfig/appmanager/C
TZ=US/Mountain
XFILESEARCHPATH=/usr/openwin/lib/locale/%L/%T/%N%S:/usr/openwin/lib/%T/%N%S
PS1=\u:\w [\033[0m]$(parse_git_branch)>
HOME=/export/home/djberge
SHLVL=2
DTSCREENSAVERLIST=StartDtscreenSwarm StartDtscreenQix StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank
AB_CARDCATALOG=/usr/dt/share/answerbooks/C/ab_cardcatalog
LOGNAME=djberge
DTDATABASESEARCHPATH=/export/home/djberge/.dt/types,/usr/dt/appconfig/types/%L,/usr/dt/appconfig/types/C
DTUSERSESSION=djberge-unknown-0
XMICONSEARCHPATH=/export/home/djberge/.dt/icons/%B%M.pm:/export/home/djberge/.dt/icons/%B%M.bm:/export/home/djberge/.dt/icons/%B:/usr/dt/appconfig/icons/%L/%B%M.pm:/usr/dt/appconfig/icons/%L/%B%M.bm:/usr/dt/appconfig/icons/%L/%B:/usr/dt/appconfig/icons/C/%B%M.pm:/usr/dt/appconfig/icons/C/%B%M.bm:/usr/dt/appconfig/icons/C/%B
CC=gcc -Wall
DISPLAY=:0.0
RUBYOPT=-rubygems
XMICONBMSEARCHPATH=/export/home/djberge/.dt/icons/%B%M.bm:/export/home/djberge/.dt/icons/%B%M.pm:/export/home/djberge/.dt/icons/%B:/usr/dt/appconfig/icons/%L/%B%M.bm:/usr/dt/appconfig/icons/%L/%B%M.pm:/usr/dt/appconfig/icons/%L/%B:/usr/dt/appconfig/icons/C/%B%M.bm:/usr/dt/appconfig/icons/C/%B%M.pm:/usr/dt/appconfig/icons/C/%B
dtstart_sessionlogfile=/dev/null
_=/usr/bin/env

Updated by ngoto (Naohisa Goto) over 5 years ago

Thanks.
The output of the commands suggest that the macro INFINITY was defined when compiling numeric.c but was not defined when compiling ext/date/date_core.c.
I still couldn't find why.

INFINITY is C99 feature, and whether INFINITY is already defined or not is checked in include/ruby/missing.h:

#ifdef INFINITY
# define HAVE_INFINITY
#else
/** @internal */
RUBY_EXTERN const union bytesequence4_or_float rb_infinity;
# define INFINITY (rb_infinity.float_value)
#endif

The concrete definition of rb_infinity is in numeric.c:

#ifdef HAVE_INFINITY
#elif !defined(WORDS_BIGENDIAN) /* BYTE_ORDER == LITTLE_ENDIAN */
const union bytesequence4_or_float rb_infinity = {{0x00, 0x00, 0x80, 0x7f}};
#else
const union bytesequence4_or_float rb_infinity = {{0x7f, 0x80, 0x00, 0x00}};
#endif

Updated by djberg96 (Daniel Berger) over 5 years ago

I don't know what to tell you. For anyone reading this, to get around it I did this:

configure --disable-install-doc --disable-install-rdoc
make
make install

It failed when it tried to install bundle gems, but core Ruby was still installed by that point. So then I went to ext/date and added this line near the top of date_core.c

const union bytesequence4_or_float rb_infinity = {{0x7f, 0x80, 0x00, 0x00}};

I also had to fix the Makefile:

top_srcdir = ../..

Then make; make install

Now it's working.

Updated by ngoto (Naohisa Goto) over 5 years ago

Adding "-std=gnu99" to CFLAGS might solve the problem.

 % CFLAGS="-std=gnu99" ./configure
#6

Updated by naruse (Yui NARUSE) over 5 years ago

  • Status changed from Feedback to Closed
  • % Done changed from 0 to 100

Applied in changeset r50104.


  • ext/date/extconf.rb: try_cflags("-std=iso9899:1999") [Bug #10906] ruby itself (including numeric.c) is built with strict compile options including -std=iso9899:1999, but ext/date is not. By the way -std=iso9899:1999 is not only a warning option but also changes behavior like MACRO definitions for example INFINITY. gcc on Solaris affect this.

Updated by daqo (David Qorashi) over 5 years ago

Adding CFLAGS="-std=iso9899:1999" worked for me.

Updated by ngoto (Naohisa Goto) over 5 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: REQUIRED
#9

Updated by nagachika (Tomoyuki Chikanaga) over 5 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: REQUIRED to 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: DONE

Backported into ruby_2_2 branch at r51553.

Updated by usa (Usaku NAKAMURA) about 5 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: DONE to 2.0.0: UNKNOWN, 2.1: DONE, 2.2: DONE

ruby_2_1 r52645 merged revision(s) 50104,50105.

Also available in: Atom PDF