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
Thread Next