build problems with 1.8, solaris and sparc options

Discussion in 'Ruby' started by Daniel Berger, Jul 9, 2003.

  1. Hi all,

    Solaris 9
    gcc 3.2.2
    Ruby 1.8 (2003-07-07)
    ld: Software Generation Utilities - Solaris Link Editors: 5.9-1.343

    >uname -a

    SunOS sp5wd-b1 5.9 Generic sun4u sparc SUNW,Sun-Blade-100

    I decided to tinker with a couple of gcc options when building Ruby 1.8.
    I used this as my $CFLAGS:

    -g -O2 -m64 -mcpu=ultrasparc

    Things seemed to go ok during make until it got to bigdecimal.c

    ...
    compiling bigdecimal
    gcc -fPIC -g -O2 -m64 -mcpu=ultrasparc -I. -I/usr/local/src/ruby
    -I/usr/local/src/ruby -I/usr/local/src/ruby/ext/bigdecimal -c bigdecimal.c
    gcc -Wl,-G -L"/usr/local/src/ruby" -L"/opt/lib" -o bigdecimal.so
    bigdecimal.o -ldl -lcrypt -lm -lc
    ld: fatal: file bigdecimal.o: wrong ELF class: ELFCLASS64
    ld: fatal: File processing errors. No output written to bigdecimal.so
    collect2: ld returned 1 exit status
    *** Error code 1
    make: Fatal error: Command failed for target `bigdecimal.so'
    Current working directory /usr/local/src/ruby/ext/bigdecimal
    *** Error code 1
    make: Fatal error: Command failed for target `all'

    Any ideas?

    Regards,

    Dan
     
    Daniel Berger, Jul 9, 2003
    #1
    1. Advertising

  2. Daniel Berger

    Dan Debertin Guest

    Daniel Berger <> writes:

    This is compiled 64-bit:
    > gcc -fPIC -g -O2 -m64 -mcpu=ultrasparc -I. -I/usr/local/src/ruby
    > -I/usr/local/src/ruby -I/usr/local/src/ruby/ext/bigdecimal -c bigdecimal.c


    This isn't:
    > gcc -Wl,-G -L"/usr/local/src/ruby" -L"/opt/lib" -o bigdecimal.so
    > bigdecimal.o -ldl -lcrypt -lm -lc
    > ld: fatal: file bigdecimal.o: wrong ELF class: ELFCLASS64
    > ld: fatal: File processing errors. No output written to bigdecimal.so
    > collect2: ld returned 1 exit status


    You can't mix 32-bit and 64-bit libraries/object files. At the link
    phase, ld doesn't know you're trying to make a 64-bit executable, so
    it looks under /usr/lib for -ldl, -lm, etc., instead of
    /usr/lib/64. (BTW, 'elfdump -e' can be invaluable in diagnosing
    problems like this.)

    An even nastier surprise is in store for you if you sneak -m64 into
    the CFLAGS of the second command -- your libgcc_s is probably compiled
    32-bit, preventing it from being used with any 64-bit libs or
    programs.

    At this point, using gcc to build 64-bit executables under Solaris is
    IMO too much of an ordeal.


    Dan
    --
    /^Dan Debertin$/ | The world is coming to an end ...
    | SAVE YOUR BUFFERS!!!
    www.nodewarrior.org |
     
    Dan Debertin, Jul 10, 2003
    #2
    1. Advertising

  3. Daniel Berger

    Guest

    Hi,

    At Thu, 10 Jul 2003 11:57:56 +0900,
    Dan Debertin wrote:
    > This is compiled 64-bit:
    > > gcc -fPIC -g -O2 -m64 -mcpu=ultrasparc -I. -I/usr/local/src/ruby
    > > -I/usr/local/src/ruby -I/usr/local/src/ruby/ext/bigdecimal -c bigdecimal.c

    >
    > This isn't:
    > > gcc -Wl,-G -L"/usr/local/src/ruby" -L"/opt/lib" -o bigdecimal.so
    > > bigdecimal.o -ldl -lcrypt -lm -lc
    > > ld: fatal: file bigdecimal.o: wrong ELF class: ELFCLASS64
    > > ld: fatal: File processing errors. No output written to bigdecimal.so
    > > collect2: ld returned 1 exit status

    >
    > You can't mix 32-bit and 64-bit libraries/object files. At the link
    > phase, ld doesn't know you're trying to make a 64-bit executable, so
    > it looks under /usr/lib for -ldl, -lm, etc., instead of
    > /usr/lib/64. (BTW, 'elfdump -e' can be invaluable in diagnosing
    > problems like this.)


    Then, try configure with LDFLAGS=-m64, or with CC='gcc -m64'
    instead of CFLAGS.

    --
    Nobu Nakada
     
    , Jul 10, 2003
    #3
  4. wrote:
    > Hi,
    >
    > At Thu, 10 Jul 2003 11:57:56 +0900,
    > Dan Debertin wrote:
    >
    >>This is compiled 64-bit:
    >>
    >>>gcc -fPIC -g -O2 -m64 -mcpu=ultrasparc -I. -I/usr/local/src/ruby
    >>>-I/usr/local/src/ruby -I/usr/local/src/ruby/ext/bigdecimal -c bigdecimal.c

    >>
    >>This isn't:
    >>
    >>>gcc -Wl,-G -L"/usr/local/src/ruby" -L"/opt/lib" -o bigdecimal.so
    >>>bigdecimal.o -ldl -lcrypt -lm -lc
    >>>ld: fatal: file bigdecimal.o: wrong ELF class: ELFCLASS64
    >>>ld: fatal: File processing errors. No output written to bigdecimal.so
    >>>collect2: ld returned 1 exit status

    >>
    >>You can't mix 32-bit and 64-bit libraries/object files. At the link
    >>phase, ld doesn't know you're trying to make a 64-bit executable, so
    >>it looks under /usr/lib for -ldl, -lm, etc., instead of
    >>/usr/lib/64. (BTW, 'elfdump -e' can be invaluable in diagnosing
    >>problems like this.)

    >
    >
    > Then, try configure with LDFLAGS=-m64, or with CC='gcc -m64'
    > instead of CFLAGS.
    >


    Ok - tried again with:

    CC='gcc -g -O2 -m64 -mcpu=ultrasparc'
    LDFLAGS='-m64'

    Seemed to go alright, although I got several warnings from the Syck libs:

    gcc -g -O2 -m64 -mcpu=ultrasparc -fPIC -g -O2 -I. -I/usr/local/src/ruby
    -I/usr/local/src/ruby -I/usr/l
    ocal/src/ruby/ext/syck -DHAVE_ST_H -c handler.c
    handler.c: In function `syck_xprivate':
    handler.c:125: warning: cast to pointer from integer of different size
    handler.c: In function `syck_taguri':
    handler.c:135: warning: cast to pointer from integer of different size
    gcc -g -O2 -m64 -mcpu=ultrasparc -fPIC -g -O2 -I. -I/usr/local/src/ruby
    -I/usr/local/src/ruby -I/usr/l
    ocal/src/ruby/ext/syck -DHAVE_ST_H -c implicit.c
    implicit.re: In function `syck_type_id_to_uri':
    implicit.re:146: warning: cast to pointer from integer of different size
    implicit.re:159: warning: cast to pointer from integer of different size
    gcc -g -O2 -m64 -mcpu=ultrasparc -fPIC -g -O2 -I. -I/usr/local/src/ruby
    -I/usr/local/src/ruby -I/usr/l
    ocal/src/ruby/ext/syck -DHAVE_ST_H -c node.c
    node.c: In function `syck_alloc_node':
    node.c:20: warning: cast to pointer from integer of different size
    node.c: In function `syck_alloc_map':
    node.c:47: warning: cast to pointer from integer of different size
    node.c:50: warning: cast to pointer from integer of different size
    node.c:51: warning: cast to pointer from integer of different size
    node.c: In function `syck_alloc_seq':
    node.c:65: warning: cast to pointer from integer of different size
    node.c:68: warning: cast to pointer from integer of different size
    node.c: In function `syck_alloc_str':
    node.c:82: warning: cast to pointer from integer of different size
    node.c: In function `syck_new_str2':
    node.c:104: warning: cast to pointer from integer of different size
    node.c: In function `syck_map_add':
    node.c:163: warning: cast to pointer from integer of different size
    node.c:164: warning: cast to pointer from integer of different size
    node.c: In function `syck_map_update':
    node.c:192: warning: cast to pointer from integer of different size
    node.c:193: warning: cast to pointer from integer of different size
    node.c: In function `syck_seq_add':
    node.c:272: warning: cast to pointer from integer of different size
    gcc -g -O2 -m64 -mcpu=ultrasparc -fPIC -g -O2 -I. -I/usr/local/src/ruby
    -I/usr/local/src/ruby -I/usr/l
    ocal/src/ruby/ext/syck -DHAVE_ST_H -c rubyext.c
    gcc -g -O2 -m64 -mcpu=ultrasparc -fPIC -g -O2 -I. -I/usr/local/src/ruby
    -I/usr/local/src/ruby -I/usr/l
    ocal/src/ruby/ext/syck -DHAVE_ST_H -c syck.c
    syck.c: In function `syck_strndup':
    syck.c:36: warning: cast to pointer from integer of different size
    syck.c: In function `syck_parser_reset_cursor':
    syck.c:132: warning: cast to pointer from integer of different size
    syck.c: In function `syck_new_parser':
    syck.c:166: warning: cast to pointer from integer of different size
    syck.c:168: warning: cast to pointer from integer of different size
    syck.c: In function `syck_parser_file':
    syck.c:302: warning: cast to pointer from integer of different size
    syck.c: In function `syck_parser_str':
    syck.c:321: warning: cast to pointer from integer of different size
    syck.c: In function `syck_parser_add_level':
    syck.c:366: warning: cast to pointer from integer of different size
    gcc -g -O2 -m64 -mcpu=ultrasparc -fPIC -g -O2 -I. -I/usr/local/src/ruby
    -I/usr/local/src/ruby -I/usr/l
    ocal/src/ruby/ext/syck -DHAVE_ST_H -c token.c
    token.re: In function `yylex':
    token.re:434: warning: cast to pointer from integer of different size
    token.re:467: warning: cast to pointer from integer of different size
    token.re:474: warning: cast to pointer from integer of different size
    token.re:503: warning: cast to pointer from integer of different size
    token.re:489: warning: cast to pointer from integer of different size
    token.re:514: warning: cast to pointer from integer of different size
    token.re:543: warning: cast to pointer from integer of different size
    token.re:550: warning: cast to pointer from integer of different size
    token.re:575: warning: cast to pointer from integer of different size
    token.re:557: warning: cast to pointer from integer of different size
    token.re:589: warning: cast to pointer from integer of different size
    token.re:621: warning: cast to pointer from integer of different size
    token.re:628: warning: cast to pointer from integer of different size
    token.re:681: warning: cast to pointer from integer of different size
    token.re:649: warning: cast to pointer from integer of different size
    token.re:658: warning: cast to pointer from integer of different size
    token.re:708: warning: cast to pointer from integer of different size
    token.re:726: warning: cast to pointer from integer of different size
    token.re:750: warning: cast to pointer from integer of different size
    token.re:833: warning: cast to pointer from integer of different size
    token.re:840: warning: cast to pointer from integer of different size
    token.re:876: warning: cast to pointer from integer of different size
    token.re:865: warning: cast to pointer from integer of different size

    No errors, though. However, when I run make test, this is the result:

    >make test

    /usr/local/src/ruby/sample/test.rb:346:in `r': wrong number of
    arguments(1 for 0) (ArgumentError)
    from /usr/local/src/ruby/sample/test.rb:346
    not ok assignment 68 -- /usr/local/src/ruby/sample/test.rb:113
    not ok assignment 69 -- /usr/local/src/ruby/sample/test.rb:114
    not ok assignment 70 -- /usr/local/src/ruby/sample/test.rb:115
    not ok assignment 71 -- /usr/local/src/ruby/sample/test.rb:116
    not ok assignment 72 -- /usr/local/src/ruby/sample/test.rb:117
    not ok assignment 73 -- /usr/local/src/ruby/sample/test.rb:118
    not ok assignment 74 -- /usr/local/src/ruby/sample/test.rb:119
    not ok assignment 75 -- /usr/local/src/ruby/sample/test.rb:120
    not ok assignment 77 -- /usr/local/src/ruby/sample/test.rb:123
    not ok assignment 78 -- /usr/local/src/ruby/sample/test.rb:124
    not ok assignment 80 -- /usr/local/src/ruby/sample/test.rb:126
    not ok assignment 81 -- /usr/local/src/ruby/sample/test.rb:127
    not ok assignment 82 -- /usr/local/src/ruby/sample/test.rb:129
    not ok assignment 84 -- /usr/local/src/ruby/sample/test.rb:131
    not ok assignment 85 -- /usr/local/src/ruby/sample/test.rb:132
    not ok assignment 86 -- /usr/local/src/ruby/sample/test.rb:133
    not ok assignment 87 -- /usr/local/src/ruby/sample/test.rb:134
    not ok assignment 88 -- /usr/local/src/ruby/sample/test.rb:135
    not ok assignment 89 -- /usr/local/src/ruby/sample/test.rb:136
    not ok assignment 90 -- /usr/local/src/ruby/sample/test.rb:137
    not ok assignment 91 -- /usr/local/src/ruby/sample/test.rb:138
    not ok assignment 92 -- /usr/local/src/ruby/sample/test.rb:139
    not ok assignment 94 -- /usr/local/src/ruby/sample/test.rb:142
    not ok assignment 95 -- /usr/local/src/ruby/sample/test.rb:143
    not ok assignment 96 -- /usr/local/src/ruby/sample/test.rb:144
    not ok assignment 98 -- /usr/local/src/ruby/sample/test.rb:146
    not ok assignment 99 -- /usr/local/src/ruby/sample/test.rb:147
    not ok assignment 100 -- /usr/local/src/ruby/sample/test.rb:148
    not ok assignment 101 -- /usr/local/src/ruby/sample/test.rb:149
    not ok assignment 104 -- /usr/local/src/ruby/sample/test.rb:153
    not ok assignment 106 -- /usr/local/src/ruby/sample/test.rb:155
    not ok assignment 108 -- /usr/local/src/ruby/sample/test.rb:157
    not ok assignment 110 -- /usr/local/src/ruby/sample/test.rb:159
    not ok assignment 111 -- /usr/local/src/ruby/sample/test.rb:160
    not ok assignment 113 -- /usr/local/src/ruby/sample/test.rb:163
    not ok assignment 115 -- /usr/local/src/ruby/sample/test.rb:165
    not ok assignment 119 -- /usr/local/src/ruby/sample/test.rb:169
    not ok assignment 120 -- /usr/local/src/ruby/sample/test.rb:170
    not ok assignment 123 -- /usr/local/src/ruby/sample/test.rb:174
    not ok assignment 124 -- /usr/local/src/ruby/sample/test.rb:175
    not ok assignment 125 -- /usr/local/src/ruby/sample/test.rb:176
    not ok assignment 126 -- /usr/local/src/ruby/sample/test.rb:177
    not ok assignment 127 -- /usr/local/src/ruby/sample/test.rb:178
    not ok assignment 128 -- /usr/local/src/ruby/sample/test.rb:179
    not ok assignment 129 -- /usr/local/src/ruby/sample/test.rb:180
    not ok assignment 130 -- /usr/local/src/ruby/sample/test.rb:181
    not ok assignment 132 -- /usr/local/src/ruby/sample/test.rb:184
    not ok assignment 134 -- /usr/local/src/ruby/sample/test.rb:186
    not ok assignment 136 -- /usr/local/src/ruby/sample/test.rb:188
    not ok assignment 138 -- /usr/local/src/ruby/sample/test.rb:190
    not ok assignment 139 -- /usr/local/src/ruby/sample/test.rb:191
    not ok assignment 142 -- /usr/local/src/ruby/sample/test.rb:195
    not ok assignment 143 -- /usr/local/src/ruby/sample/test.rb:196
    not ok assignment 144 -- /usr/local/src/ruby/sample/test.rb:197
    not ok assignment 145 -- /usr/local/src/ruby/sample/test.rb:198
    not ok assignment 146 -- /usr/local/src/ruby/sample/test.rb:199
    not ok assignment 147 -- /usr/local/src/ruby/sample/test.rb:200
    not ok assignment 148 -- /usr/local/src/ruby/sample/test.rb:201
    not ok assignment 149 -- /usr/local/src/ruby/sample/test.rb:202
    not ok assignment 150 -- /usr/local/src/ruby/sample/test.rb:203
    not ok assignment 152 -- /usr/local/src/ruby/sample/test.rb:206
    not ok assignment 154 -- /usr/local/src/ruby/sample/test.rb:208
    not ok assignment 156 -- /usr/local/src/ruby/sample/test.rb:210
    not ok assignment 157 -- /usr/local/src/ruby/sample/test.rb:211
    not ok assignment 159 -- /usr/local/src/ruby/sample/test.rb:213
    not ok assignment 160 -- /usr/local/src/ruby/sample/test.rb:214
    not ok assignment 163 -- /usr/local/src/ruby/sample/test.rb:218
    not ok assignment 165 -- /usr/local/src/ruby/sample/test.rb:220
    not ok assignment 167 -- /usr/local/src/ruby/sample/test.rb:222
    not ok assignment 168 -- /usr/local/src/ruby/sample/test.rb:223
    not ok assignment 170 -- /usr/local/src/ruby/sample/test.rb:225
    not ok assignment 171 -- /usr/local/src/ruby/sample/test.rb:226
    not ok assignment 173 -- /usr/local/src/ruby/sample/test.rb:229
    not ok assignment 175 -- /usr/local/src/ruby/sample/test.rb:231
    not ok assignment 178 -- /usr/local/src/ruby/sample/test.rb:234
    not ok assignment 180 -- /usr/local/src/ruby/sample/test.rb:236
    not ok assignment 181 -- /usr/local/src/ruby/sample/test.rb:237
    test failed
    *** Error code 1
    make: Fatal error: Command failed for target `test'

    Thinking I could ignore the test failure I tried to install anyway:

    >make install

    ./miniruby ./instruby.rb --dest-dir="" --make="make" --mflags=""
    --make-flags="" --mantype="man"
    install -c -m 0755 ruby /opt/bin/ruby
    /usr/local/src/ruby/lib/fileutils.rb:415:in `sysread': sysread for
    buffered IO (IOError)
    from /usr/local/src/ruby/lib/fileutils.rb:415:in `copy_stream'
    from /usr/local/src/ruby/lib/fileutils.rb:403:in `copy_file'
    from /usr/local/src/ruby/lib/fileutils.rb:402:in `open'
    from /usr/local/src/ruby/lib/fileutils.rb:402:in `copy_file'
    from /usr/local/src/ruby/lib/fileutils.rb:401:in `open'
    from /usr/local/src/ruby/lib/fileutils.rb:401:in `copy_file'
    from /usr/local/src/ruby/lib/fileutils.rb:643:in `install'
    from /usr/local/src/ruby/lib/fileutils.rb:640:in `fu_each_src_dest'
    from /usr/local/src/ruby/lib/fileutils.rb:640:in `install'
    from ./instruby.rb:58:in `install'
    from ./instruby.rb:58:in `install'
    from ./instruby.rb:98
    *** Error code 1
    make: Fatal error: Command failed for target `install'

    Nope. Any ideas?

    Regards,

    Dan
     
    Daniel Berger, Jul 10, 2003
    #4
  5. Daniel Berger

    Guest

    Hi,

    At Fri, 11 Jul 2003 00:55:43 +0900,
    Daniel Berger wrote:
    > Seemed to go alright, although I got several warnings from the Syck libs:


    These seem to be because syck.h lacks #include <stdlib.h>.

    > No errors, though. However, when I run make test, this is the result:


    Same as reported by Akira Yamada.

    > Thinking I could ignore the test failure I tried to install anyway:
    >
    > >make install

    > ./miniruby ./instruby.rb --dest-dir="" --make="make" --mflags=""
    > --make-flags="" --mantype="man"
    > install -c -m 0755 ruby /opt/bin/ruby
    > /usr/local/src/ruby/lib/fileutils.rb:415:in `sysread': sysread for
    > buffered IO (IOError)


    How are FILE_COUNT and FILE_READEND defined in config.h?

    --
    Nobu Nakada
     
    , Jul 11, 2003
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Zsolt Koppany
    Replies:
    2
    Views:
    394
    Zsolt Koppany
    Oct 30, 2003
  2. Bruce
    Replies:
    4
    Views:
    1,473
    Gordon Beaton
    Mar 13, 2006
  3. Ganesh Tiwari
    Replies:
    1
    Views:
    452
    Victor Bazarov
    Aug 10, 2004
  4. Trent Mick
    Replies:
    0
    Views:
    435
    Trent Mick
    Jun 28, 2005
  5. Park Heesob
    Replies:
    3
    Views:
    345
    Ryan Arneson
    May 9, 2005
Loading...

Share This Page