I am trying to compile a 64bit perl 5.8, using GCC 3.2 on solaris. So far with little success. I started with a clean perl 5.8, and ran Configure thus:
# sh Configure -Dcc=gcc -des -Duse64bitall > Configure.log 2>&1 And then I ran (gnu) make: # /usr/local/bin/make This ended with the following error: <last few lines of output from make...> `sh cflags "optimize='-O'" opmini.o` -DPERL_EXTERNAL_GLOB opmini.c CCCMD = gcc -DPERL_CORE -c -mcpu=v9 -m64 -Wa,-xarch=v9 -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -Wall rm -f opmini.c gcc -L/usr/local/lib -L/usr/lib/sparcv9 -o miniperl \ miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lc ld: fatal: file miniperlmain.o: wrong ELF class: ELFCLASS64 ld: fatal: File processing errors. No output written to miniperl collect2: ld returned 1 exit status make: *** [miniperl] Error 1 <end output> What seems to happen here is that ld complains about some of the object files. They are 64BIT (what a surprise) but ld aparently doesn't expect this. To find out why I ran gcc with the -v option. # gcc -v -L/usr/local/lib -L/usr/lib/sparcv9 -o miniperl \ miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lc Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/specs Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls Thread model: posix gcc version 3.2 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o miniperl /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crt1.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crti.o /usr/ccs/lib/values-Xa.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtbegin.o -L/usr/local/lib -L/usr/lib/sparcv9 -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2 -L/usr/ccs/bin -L/usr/ccs/lib -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/../../.. miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lc -lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtend.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtn.o ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.273 ld: fatal: file miniperlmain.o: wrong ELF class: ELFCLASS64 ld: fatal: File processing errors. No output written to miniperl collect2: ld returned 1 exit status And the problem became clear. The collect2 seems to "collect" the wrong modules. The modules in usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/ are 32BIT modules. We need to tell gcc to link against what lives in the sparcv9 subdir. Adding -m64 seems to do the trick... # gcc -v -L/usr/local/lib -L/usr/lib/sparcv9 -o miniperl \ miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lc -m64 Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/specs Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls Thread model: posix gcc version 3.2 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/collect2 -V -Y P,/usr/lib/sparcv9 -Qy -o miniperl /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/sparcv9/crt1.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/sparcv9/crti.o /usr/lib/sparcv9/values-Xa.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/sparcv9/crtbegin.o -L/usr/local/lib -L/usr/lib/sparcv9 -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/sparcv9 -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2 -L/usr/ccs/bin/sparcv9 -L/usr/ccs/bin -L/usr/ccs/lib/sparcv9 -L/usr/ccs/lib -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/../../../sparcv9 -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/../../.. -L/lib/sparcv9 -L/usr/lib/sparcv9 miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lc -lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/sparcv9/crtend.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/sparcv9/crtn.o ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.273 See how gcc now takes the correct libraries... I guess the hints file for solaris needs updating... So I went back to the start and re-ran Configure with a couple of ectra options, thus: sh Configure -Dcc=gcc -des -Duse64bitall -Aldflags="-mcpu=v9 -m64"\ -Alddlflags="-mcpu=v9 -m64" > Configure.log 2>&1 I ran make and saw that my previous problems were aparently solved... But then after a while this happens: <more make output> cp B/makeliblinks ../../lib/B/makeliblinks make[2]: Entering directory `/export/home/bit/perl/perl_base/perl-5.8.0/ext/B/C' ../../../miniperl "-I../../../lib" "-I../../../lib" ../../../lib/ExtUtils/xsubpp -typemap ../../../lib/ExtUtils/typemap C.xs > C.xsc && mv C.xsc C.c gcc -c -mcpu=v9 -m64 -Wa,-xarch=v9 -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -DVERSION=\"1.01\" -DXS_VERSION=\"1.01\" -fPIC "-I../../.." C.c Running Mkbootstrap for B::C () chmod 644 C.bs rm -f ../../../lib/auto/B/C/C.so LD_RUN_PATH="" gcc -mcpu=v9 -m64 -L/usr/local/lib -L/usr/lib/sparcv9 C.o -o ../../../lib/auto/B/C/C.so Undefined first referenced symbol in file Perl_safesysmalloc C.o Perl_sv_free C.o Perl_hv_store_ent C.o Perl_get_sv C.o Perl_sv_setiv C.o Perl_sv_setref_iv C.o Perl_despatch_signals C.o PL_op C.o PL_stack_sp C.o PL_sig_pending C.o Perl_sv_2pv_flags C.o PL_stack_base C.o Perl_get_hv C.o Perl_newSViv C.o PL_runops C.o main /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/sparcv9/crt1.o Perl_croak C.o PL_tainted C.o PL_markstack_ptr C.o Perl_form C.o PL_sv_yes C.o ld: fatal: Symbol referencing errors. No output written to ../../../lib/auto/B/C/C.so collect2: ld returned 1 exit status make[2]: *** [../../../lib/auto/B/C/C.so] Error 1 make[2]: Leaving directory `/export/home/bit/perl/perl_base/perl-5.8.0/ext/B/C' make[1]: *** [subdirs] Error 2 make[1]: Leaving directory `/export/home/bit/perl/perl_base/perl-5.8.0/ext/B' make: *** [lib/auto/B/B.so] Error 2 <end make output> And here I am currently stuck. Looking at the missing symbols I guess that some fundamental part of perl isn't included in the linking. But what? Thanks in advance, Krist van Besien --- Krist van Besien Unix Specialist BZBD Bundesamt für Informatik und Telekommunikation BIT Monbijoustrasse 74, CH-3003 Bern Tel. +41 31 322 24 46 added interaction www.informatik.admin.ch