Closed p5pRT closed 20 years ago
Hi\,
I can't seem to get Solaris to build as 64 bit.
uname -a SunOS sp5wd-b1 5.9 Generic sun4u sparc SUNW\,Sun-Blade-100
gcc -v Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.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.3.2
Sun's ld\, as and ar (i.e. /usr/ccs/... is first in my PATH)
Built with sh Configure -Dusethreads -Duse64bitall -Dcc=gcc
I also tried explicitly adding -B/usr/ccs/bin\, *just in case*
Configure seems to work smoothly\, although I end up with 2 makefiles:
make: Warning: Both `makefile' and `Makefile' exist
Hmm...strange. Anyway\, I then performed make. Did fine until I got here:
CCCMD = gcc -B/usr/ccs/bin/ -DPERL_CORE -c -D_REENTRANT -mcpu=v9 -m64 -Wa\,-xarch=v9 -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -Wall rm -f libperl.a /usr/ccs/bin/ar rcu libperl.a perl.o gv.o toke.o perly.o op.o pad.o regcomp.o dump.o util.o mg.o reentr.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o xsutils.o globals.o perlio.o perlapi.o numeric.o locale.o pp_pack.o pp_sort.o rm -f opmini.c cp op.c opmini.c `sh cflags "optimize='-O'" opmini.o` -DPERL_EXTERNAL_GLOB opmini.c CCCMD = gcc -B/usr/ccs/bin/ -DPERL_CORE -c -D_REENTRANT -mcpu=v9 -m64 -Wa\,-xarch=v9 -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O -Wall rm -f opmini.c gcc -B/usr/ccs/bin/ -L/usr/lib/sparcv9 -L/usr/local/lib -o miniperl \ miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lpthread -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 *** Error code 1 make: Fatal error: Command failed for target `miniperl'
I read through the README.solaris\, and messed around with the Makefile some\, changing the -L/usr/local/lib to -L/usr/ccs/lib\, but that didn't help.
Any ideas? I've attached a copy of the Makefile as well to help. I couldn't find a config.log anywhere.
Regards\,
Dan
Makefile:
# Makefile.SH # This file is derived from Makefile.SH. Any changes made here will # be lost the next time you run Configure. # Makefile is used to generate makefile. The only difference # is that makefile has the dependencies filled in at the end. # # # I now supply perly.c with the kits\, so don't remake perly.c without byacc BYACC = byacc CC = gcc -B/usr/ccs/bin/ LD = gcc -B/usr/ccs/bin/
LDFLAGS = -L/usr/lib/sparcv9 -L/usr/ccs/lib CLDFLAGS = -L/usr/lib/sparcv9 -L/usr/ccs/lib
mallocsrc = mallocobj = LNS = /usr/local/bin/ln -s # NOTE: some systems don't grok "cp -f". XXX Configure test needed? CPS = cp RMS = rm -f ranlib = :
# The following are mentioned only to make metaconfig include the # appropriate questions in Configure. If you want to change these\, # edit config.sh instead\, or specify --man1dir=/wherever on # installman commandline. bin = /usr/local/bin scriptdir = /usr/local/bin shrpdir = /usr/local/lib/perl5/5.8.2/sun4-solaris-thread-multi-64/CORE privlib = /usr/local/lib/perl5/5.8.2 man1dir = /usr/local/man/man1 man1ext = 1 man3dir = /usr/local/man/man3 man3ext = 3
# The following are used to build and install shared libraries for
# dynamic loading.
LDDLFLAGS = -G -L/usr/lib/sparcv9 -L/usr/ccs/lib
SHRPLDFLAGS = $(LDDLFLAGS)
CCDLFLAGS =
DLSUFFIX = .so
PLDLFLAGS =
LIBPERL = libperl.a
LLIBPERL= $(LIBPERL)
SHRPENV =
# Static targets are ordinarily built without CCCDLFLAGS. However\, # if building a shared libperl.so that might later be linked into # another application\, then it might be appropriate to also build static # extensions (usually just DynaLoader) with relocatable code (e.g. -fPIC # for GNU cc). This is handled by ext/util/make_ext. STATIC = static
# The following is used to include the current directory in # the dynamic loader path you are building a shared libperl. LDLIBPTH =
dynamic_ext = lib/auto/B/B.so lib/auto/ByteLoader/ByteLoader.so
lib/auto/Cwd/Cwd.so lib/auto/Data/Dumper/Dumper.so
lib/auto/Devel/DProf/DProf.so lib/auto/Devel/PPPort/PPPort.so
lib/auto/Devel/Peek/Peek.so lib/auto/Digest/MD5/MD5.so
lib/auto/Encode/Encode.so lib/auto/Fcntl/Fcntl.so
lib/auto/File/Glob/Glob.so lib/auto/Filter/Util/Call/Call.so
lib/auto/I18N/Langinfo/Langinfo.so lib/auto/IO/IO.so
lib/auto/IPC/SysV/SysV.so lib/auto/List/Util/Util.so
lib/auto/MIME/Base64/Base64.so lib/auto/NDBM_File/NDBM_File.so
lib/auto/ODBM_File/ODBM_File.so lib/auto/Opcode/Opcode.so
lib/auto/POSIX/POSIX.so lib/auto/PerlIO/encoding/encoding.so
lib/auto/PerlIO/scalar/scalar.so lib/auto/PerlIO/via/via.so
lib/auto/SDBM_File/SDBM_File.so lib/auto/Socket/Socket.so
lib/auto/Storable/Storable.so lib/auto/Sys/Hostname/Hostname.so
lib/auto/Sys/Syslog/Syslog.so lib/auto/Time/HiRes/HiRes.so
lib/auto/Unicode/Normalize/Normalize.so lib/auto/XS/APItest/APItest.so
lib/auto/XS/Typemap/Typemap.so lib/auto/attrs/attrs.so lib/auto/re/re.so
lib/auto/threads/threads.so lib/auto/threads/shared/shared.so
static_ext =
nonxs_ext = ext/Errno/pm_to_blib
ext = $(dynamic_ext) $(static_ext) $(nonxs_ext)
DYNALOADER = lib/auto/DynaLoader/DynaLoader$(LIB_EXT)
libs = -lsocket -lnsl -ldl -lm -lpthread -lc
public = perl$(EXE_EXT) utilities translators
shellflags =
# This is set to MAKE=make if your make command doesn't # do it for you. #
# Mention gmake here so it gets probed for by Configure.
# These variables may need to be manually set for non-Unix systems. AR = /usr/ccs/bin/ar EXE_EXT = LIB_EXT = .a OBJ_EXT = .o PATH_SEP = :
FIRSTMAKEFILE = makefile
# Any special object files needed by this architecture\, e.g. os2/os2.obj ARCHOBJS =
.SUFFIXES: .c $(OBJ_EXT) .i .s
# grrr SHELL = /bin/sh
# how to tr(anslate) newlines TRNL = '\n'
OPTIMIZE = -O
EXTRAS =
INSTALLPREFIXEXP = /usr/local
CCCMD = `sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $@`
CCCMDSRC = `sh $(shellflags) cflags "optimize='$(OPTIMIZE)'" $\<`
private = preplibrary lib/Config.pm lib/ExtUtils/Miniperl.pm
# Files to be built with variable substitution before miniperl # is available. sh = Makefile.SH cflags.SH config_h.SH makeaperl.SH makedepend.SH \ makedir.SH myconfig.SH writemain.SH pod/Makefile.SH
shextract = Makefile cflags config.h makeaperl makedepend \ makedir myconfig writemain pod/Makefile
# Files to be built with variable substitution after miniperl is # available. Dependencies handled manually below (for now).
pl = pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL \ pod/pod2usage.PL pod/podchecker.PL pod/podselect.PL
# lib/lib.pm is not listed here because it has a rule of its own. plextract = pod/pod2html pod/pod2latex pod/pod2man pod/pod2text \ pod/pod2usage pod/podchecker pod/podselect
addedbyconf = UU $(shextract) $(plextract) lib/lib.pm pstruct
h1 = EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h dosish.h h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h opcode.h h3 = pad.h patchlevel.h perl.h perlapi.h perly.h pp.h proto.h regcomp.h h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h h5 = utf8.h warnings.h h = $(h1) $(h2) $(h3) $(h4) $(h5)
c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c reentr.c c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c pad.c c4 = globals.c perlio.c perlapi.c numeric.c locale.c pp_pack.c pp_sort.c
c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c
obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT)
obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
lintflags = -hbvxac
.c$(OBJ_EXT): $(CCCMD) $(PLDLFLAGS) $*.c
.c.i: $(CCCMDSRC) -E $*.c > $*.i
.c.s: $(CCCMDSRC) -S $*.c
all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(public) $(dynamic_ext) $(nonxs_ext) extras.make @echo " "; @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
.PHONY: all compile translators utilities
compile: all echo "testing compilation" > testcompile; cd utils; $(MAKE) compile; cd x2p; $(MAKE) compile; cd pod; $(MAKE) compile;
translators: miniperl$(EXE_EXT) lib/Config.pm FORCE @echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all
utilities: miniperl$(EXE_EXT) lib/Config.pm $(plextract) lib/lib.pm FORCE @echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all
# This is now done by installman only if you actually want the man pages. # @echo " "; echo " Making docs"; cd pod; $(MAKE) all;
# Phony target to force checking subdirectories. # Apparently some makes require an action for the FORCE target. .PHONY: FORCE FORCE: @sh -c true
# We do a copy of the op.c instead of a symlink because gcc gets huffy # if we have a symlink forest to another disk (it complains about too many # levels of symbolic links\, even if we have only two)
opmini$(OBJ_EXT): op.c config.h $(RMS) opmini.c $(CPS) op.c opmini.c $(CCCMD) $(PLDLFLAGS) -DPERL_EXTERNAL_GLOB opmini.c $(RMS) opmini.c
miniperlmain$(OBJ_EXT): miniperlmain.c patchlevel.h $(CCCMD) $(PLDLFLAGS) $*.c
perlmain.c: miniperlmain.c config.sh $(FIRSTMAKEFILE) sh writemain $(DYNALOADER) $(static_ext) > writemain.tmp sh mv-if-diff writemain.tmp perlmain.c
perlmain$(OBJ_EXT): perlmain.c $(CCCMD) $(PLDLFLAGS) $*.c
# The file ext.libs is a list of libraries that must be linked in # for static extensions\, e.g. -lm -lgdbm\, etc. The individual # static extension Makefile's add to it. ext.libs: $(static_ext) -@test -f ext.libs || touch ext.libs
$(LIBPERL): $& perl$(OBJ_EXT) $(obj) $(LIBPERLEXPORT) rm -f $(LIBPERL) $(AR) rcu $(LIBPERL) perl$(OBJ_EXT) $(obj) @$(ranlib) $(LIBPERL)
# How to build executables.
# The $& notation tells Sequent machines that it can do a parallel make\, # and is harmless otherwise. # The miniperl -w -MExporter line is a basic cheap test to catch errors # before make goes on to run preplibrary and then MakeMaker on extensions. # This is very handy because later errors are often caused by miniperl # build problems but that's not obvious to the novice. # The Module used here must not depend on Config or any extensions.
miniperl$(EXE_EXT): $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT) -@rm -f miniperl.xok $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl \ miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs) $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '\<?>' || $(MAKE) minitest
perl$(EXE_EXT): $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT) -@rm -f miniperl.xok $(SHRPENV) $(LDLIBPTH) $(CC) -o perl$(PERL_SUFFIX) $(PERL_PROFILE_LDFLAGS) $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
# Purify/Quantify Perls.
pureperl$(EXE_EXT): $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT) $(SHRPENV) $(LDLIBPTH) purify $(CC) -o pureperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
purecovperl$(EXE_EXT): $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT) $(SHRPENV) $(LDLIBPTH) purecov $(CC) -o purecovperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
quantperl$(EXE_EXT): $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT) $(SHRPENV) $(LDLIBPTH) quantify $(CC) -o quantperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
# Valgrind perl (currently Linux only)
perl.valgrind.config: config.sh @echo "To build perl.valgrind you must Configure -Doptimize=-g -Uusemymalloc\, checking..." @$(MAKE) perl.config.dashg @echo "Checking usemymalloc='n' in config.sh..." @grep "^usemymalloc=" config.sh @grep "^usemymalloc='n'" config.sh >/dev/null || exit 1 @echo "And of course you have to have valgrind..." valgrind ./perl -e 1 2>/dev/null || exit 1
# Third Degree Perl (Tru64 only)
perl.config.dashg: @echo "Checking optimize='-g' in config.sh..." @grep "^optimize=" config.sh @grep "^optimize='-g'" config.sh >/dev/null || exit 1
perl.third.config: config.sh @echo "To build perl.third you must Configure -Doptimize=-g -Uusemymalloc\, checking..." @$(MAKE) perl.config.dashg @echo "Checking usemymalloc='n' in config.sh..." @grep "^usemymalloc=" config.sh @grep "^usemymalloc='n'" config.sh >/dev/null || exit 1
perl.third: /usr/bin/atom perl.third.config perl atom -tool third -L. -all -gp -toolargs="-invalid -uninit heap+stack+copy -min 0" perl @echo "Now you may run perl.third and then study perl.3log."
# Pixie Perls (Tru64 and IRIX only)
perl.pixie.config: config.sh @echo "To build perl.pixie you must Configure -Doptimize=-g\, checking..." @$(MAKE) perl.config.dashg
perl.pixie.atom: /usr/bin/atom perl atom -tool pixie -L. -all -toolargs="-quiet" perl
perl.pixie.irix: perl pixie perl
perl.pixie: /usr/bin/pixie perl.pixie.config perl if test -x /usr/bin/atom; then \ $(MAKE) perl.pixie.atom; \ else \ $(MAKE) perl.pixie.irix; \ fi @echo "Now you may run perl.pixie and then run pixie."
# Gprof Perl
perl.config.dashpg: @echo "Checking optimize='-pg' in config.sh..." @grep "^optimize=" config.sh @grep "^optimize='.*-pg.*'" config.sh >/dev/null || exit 1
perl.gprof.config: config.sh @echo "To build perl.gprof you must Configure -Doptimize=-pg\, checking..." @$(MAKE) perl.config.dashpg
perl.gprof: /usr/bin/gprof perl.gprof.config @-rm -f perl $(MAKE) PERL_SUFFIX=.gprof PERL_PROFILE_LDFLAGS=-pg perl @echo "Now you may run perl.gprof and then run gprof perl.gprof."
# Gcov Perl
perl.config.gcov: @echo "To build perl.gcov you must use gcc 3.0 or newer\, checking..." @echo "Checking gccversion in config.sh..." @grep "^gccversion=" config.sh @grep "^gccversion='[3-9]\." config.sh >/dev/null || exit 1 @echo "To build perl.gcov you must Configure -Dccflags=-fprofile-arcs -ftest-coverage\, checking..." @echo "Checking ccflags='-fprofile-arcs -ftest-coverage' in config.sh..." @grep "^ccflags=" config.sh @grep "^ccflags='.*-fprofile-arcs -ftest-coverage.*'" config.sh
/dev/null || exit 1
perl.gcov: perl.config.gcov @-rm -f perl $(MAKE) PERL_SUFFIX=.gcov PERL_PROFILE_LDFLAGS='' perl @echo "Now you may run perl.gcov and then run gcov some.c."
# Microperl. This is just a convenience thing if one happens to # build also the full Perl and therefore the real big Makefile: # usually one should manually explicitly issue the below command.
.PHONY: microperl microperl: $(MAKE) -f Makefile.micro
# This version\, if specified in Configure\, does ONLY those scripts which need # set-id emulation. Suidperl must be setuid root. It contains the "taint" # checks as well as the special code to validate that the script in question # has been invoked correctly.
suidperl$(EXE_EXT): $& sperl$(OBJ_EXT) perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT) $(SHRPENV) $(LDLIBPTH) $(CC) -o suidperl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
sperl$(OBJ_EXT): perl.c $(h) $(RMS) sperl.c $(LNS) perl.c sperl.c $(CCCMD) -DIAMSUID sperl.c $(RMS) sperl.c
# We have to call our ./makedir because Ultrix 4.3 make can't handle the line # test -d lib/auto || mkdir lib/auto # We need to autosplit in two steps because VOS can't handle so many args # .PHONY: preplibrary preplibrary: miniperl$(EXE_EXT) lib/Config.pm lib/lib.pm $(PREPLIBRARY_LIBPERL) @sh ./makedir lib/auto @echo " AutoSplitting perl library" $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \ autosplit_lib_modules(@ARGV)' lib/*.pm $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \ autosplit_lib_modules(@ARGV)' lib/*/*.pm $(MAKE) lib/re.pm
# Take care to avoid modifying lib/Config.pm without reason # (If trying to create a new port and having problems with the configpm script\, # try 'make minitest' and/or commenting out the tests at the end of configpm.) lib/Config.pm: config.sh miniperl$(EXE_EXT) configpm Porting/Glossary $(LDLIBPTH) ./miniperl -Ilib configpm configpm.tmp sh mv-if-diff configpm.tmp $@
lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl$(EXE_EXT) minimod.pl lib/Config.pm $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp sh mv-if-diff minimod.tmp $@ -touch lib/ExtUtils/Miniperl.pm
lib/re.pm: ext/re/re.pm cp ext/re/re.pm ext/re/re.tmp && sh mv-if-diff ext/re/re.tmp lib/re.pm
$(plextract): miniperl$(EXE_EXT) lib/Config.pm x2p/s2p @-rm -f $@ $(LDLIBPTH) ./miniperl -Ilib $@.PL
x2p/s2p: miniperl$(EXE_EXT) lib/Config.pm x2p/s2p.PL cd x2p; $(LDLIBPTH) $(MAKE) s2p
lib/lib.pm: miniperl$(EXE_EXT) lib/Config.pm @-rm -f $@ $(LDLIBPTH) ./miniperl -Ilib lib/lib_pm.PL
extra.pods: miniperl$(EXE_EXT) -@test -f extra.pods && rm -f `cat extra.pods` -@rm -f extra.pods -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \ nx=`echo $$x | sed -e "s/README\.//"`; \ cd pod ; $(LNS) ../$$x "perl"$$nx".pod" ; cd .. ; \ echo "pod/perl"$$nx".pod" >> extra.pods ; \ done -@rm -f pod/perlvms.pod -@test -f vms/perlvms.pod && cd pod && $(LNS) ../vms/perlvms.pod perlvms.pod && cd .. && echo "pod/perlvms.pod" >> extra.pods
extras.make: perl$(EXE_EXT) -@test -s extras.lst && PATH=`pwd`:${PATH} PERL5LIB=`pwd`/lib $(LDLIBPTH) ./perl -Ilib -MCPAN -e '@ARGV&&make(@ARGV)' `cat extras.lst`
extras.test: perl$(EXE_EXT) -@test -s extras.lst && PATH=`pwd`:${PATH} PERL5LIB=`pwd`/lib $(LDLIBPTH) ./perl -Ilib -MCPAN -e '@ARGV&&test(@ARGV)' `cat extras.lst`
extras.install: perl$(EXE_EXT) -@test -s extras.lst && PATH=`pwd`:${PATH} PERL5LIB=`pwd`/lib $(LDLIBPTH) ./perl -Ilib -MCPAN -e '@ARGV&&install(@ARGV)' `cat extras.lst`
.PHONY: install install-strip install-all install-verbose install-silent \ no-install install.perl install.man install.html
META.yml: Porting/makemeta Porting/Maintainers.pl Porting/Maintainers.pm $(LDLIBPTH) ./miniperl -Ilib Porting/makemeta
install-strip: $(MAKE) STRIPFLAGS=-s install
install install-all: $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS)
install-verbose: $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-V
install-silent: $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-S
no-install: $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-n
install.perl: all installperl if [ -n "$(COMPILE)" ]; \ then \ cd utils; $(MAKE) compile; \ cd ../x2p; $(MAKE) compile; \ cd ../pod; $(MAKE) compile; \ else :; \ fi $(LDLIBPTH) ./perl installperl --destdir=$(DESTDIR) $(INSTALLFLAGS) $(STRIPFLAGS) $(MAKE) extras.install
install.man: all installman $(LDLIBPTH) ./perl installman --destdir=$(DESTDIR) $(INSTALLFLAGS)
# XXX Experimental. Hardwired values\, but useful for testing. # Eventually Configure could ask for some of these values. install.html: all installhtml -@test -f README.vms && cd vms && $(LNS) ../README.vms README_vms.pod && cd .. $(LDLIBPTH) ./perl installhtml \ --podroot=. --podpath=. --recurse \ --htmldir=$(privlib)/html \ --htmlroot=$(privlib)/html \ --splithead=pod/perlipc \ --splititem=pod/perlfunc \ --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \ --verbose
# I now supply perly.c with the kits\, so the following section is # used only if you force byacc to run by saying # make run_byacc # Since we patch up the byacc output\, the perly.fixer script needs # to run with precisely the same version of byacc as I use. You # normally shouldn't remake perly.[ch].
.PHONY: check_byacc run_byacc
check_byacc: @$(BYACC) -V 2>&1 | grep 'version 1\.8\.2'
run_byacc: FORCE check_byacc $(BYACC) -d perly.y -chmod 664 perly.c perly.h sh $(shellflags) ./perly.fixer y.tab.c perly.c sed -e 's/fprintf *( *stderr *\,/PerlIO_printf(Perl_debug_log\,/g' \ -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c sed -e '/^extern YYSTYPE yy/D' y.tab.h >yh.tmp && mv yh.tmp y.tab.h cmp -s y.tab.h perly.h && rm -f y.tab.h || mv y.tab.h perly.h perl -i.old perlyline.pl perly.c chmod 664 vms/perly_c.vms vms/perly_h.vms perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
# We don't want to regenerate perly.c and perly.h\, but they might # appear out-of-date after a patch is applied or a new distribution is # made. perly.c: perly.y -@sh -c true
perly.h: perly.y -@sh -c true
PERLYVMS = vms/perly_c.vms vms/perly_h.vms
$(PERLYVMS): perly.c perly.h vms/vms_yfix.pl perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
# No compat3.sym here since and including the 5.004_50. # No interp.sym since 5.005_03. SYM = global.sym globvar.sym perlio.sym pp.sym
SYMH = perlvars.h intrpvar.h thrdvar.h
CHMOD_W = chmod +w
# The following files are generated automatically # autodoc.pl: pod/perlapi.pod pod/perlintern.pod # bytecode.pl: ext/ByteLoader/byterun.h ext/ByteLoader/byterun.c # ext/B/B/Asmdata.pm # embed.pl: proto.h embed.h embedvar.h global.sym # perlapi.h perlapi.c # [* embed.pl needs pp.sym generated by opcode.pl! *] # keywords.pl: keywords.h # opcode.pl: opcode.h opnames.h pp_proto.h pp.sym # regcomp.pl: regnodes.h # warnings.pl: warnings.h lib/warnings.pm # The correct versions should be already supplied with the perl kit\, # in case you don't have perl available. # To force them to be regenerated\, run # perl regen.pl # with your existing copy of perl # (make regen_headers is kept for backwards compatibility)
AUTOGEN_FILES = keywords.h opcode.h opnames.h pp_proto.h pp.sym proto.h \ embed.h embedvar.h global.sym \ pod/perlintern.pod pod/perlapi.pod \ perlapi.h perlapi.c ext/ByteLoader/byterun.h \ ext/ByteLoader/byterun.c ext/B/B/Asmdata.pm regnodes.h \ warnings.h lib/warnings.pm
.PHONY: regen_headers regen_pods regen_all
regen regen_headers: FORCE -perl regen.pl
regen_pods: FORCE -cd pod; $(LDLIBPTH) $(MAKE) regen_pods
regen_all: $(PERLYVMS) regen regen_pods
.PHONY: manisort manicheck
manisort: FORCE LC_ALL=C sort -fdc MANIFEST || (echo "WARNING: re-sorting MANIFEST"; \ LC_ALL=C sort -fdo MANIFEST MANIFEST)
manicheck: FORCE perl Porting/manicheck
# Extensions: # Names added to $(dynamic_ext) or $(static_ext) or $(nonxs_ext) will # automatically get built. There should ordinarily be no need to change # any of this part of makefile. # # The dummy dependency is a place holder in case $(dynamic_ext) or # $(static_ext) is empty. # # DynaLoader may be needed for extensions that use Makefile.PL.
$(DYNALOADER): miniperl$(EXE_EXT) preplibrary FORCE @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
d_dummy $(dynamic_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
s_dummy $(static_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
n_dummy $(nonxs_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
.PHONY: clean _tidy _mopup _cleaner1 _cleaner2 \ realclean _realcleaner clobber _clobber \ distclean veryclean _verycleaner
clean: _tidy _mopup
realclean: _realcleaner _mopup @echo "Note that '$(MAKE) realclean' does not delete config.sh or Policy.sh"
_clobber: -@rm -f Cross/run-* Cross/to-* Cross/from-* rm -f config.sh cppstdin Policy.sh extras.lst
clobber: _realcleaner _mopup _clobber
distclean: clobber
# Like distclean but also removes emacs backups and *.orig. veryclean: _verycleaner _mopup _clobber -@rm -f Obsolete Wanted
# Do not 'make _mopup' directly. _mopup: rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c -rmdir .depending -@test -f extra.pods && rm -f `cat extra.pods` -@test -f vms/README_vms.pod && rm -f vms/README_vms.pod -rm -f perl.exp ext.libs extra.pods opmini.o -rm -f perl.export perl.dll perl.libexp perl.map perl.def -rm -f perl.loadmap miniperl.loadmap perl.prelmap miniperl.prelmap -rm -f perl.third lib*.so.perl.third perl.3log t/perl.third t/perl.3log -rm -f perl.pixie lib*.so.perl.pixie lib*.so.Addrs -rm -f perl.Addrs perl.Counts t/perl.Addrs t/perl.Counts *perl.xok -rm -f perlld cygwin.c ld2 libperl*.def libperl*.dll cygperl*.dll *.exe.stackdump -rm -f perl$(EXE_EXT) suidperl$(EXE_EXT) miniperl$(EXE_EXT) $(LIBPERL) libperl.* microperl -rm -f opcode.h-old opnames.h-old pp.sym-old pp_proto.h-old
# Do not 'make _tidy' directly. _tidy: -cd pod; $(LDLIBPTH) $(MAKE) clean -cd utils; $(LDLIBPTH) $(MAKE) clean -cd x2p; $(LDLIBPTH) $(MAKE) clean -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \ $(LDLIBPTH) sh ext/util/make_ext clean $$x MAKE=$(MAKE) ; \ done rm -f testcompile compilelog
_cleaner1: -cd os2; rm -f Makefile -cd pod; $(LDLIBPTH) $(MAKE) $(CLEAN) -cd utils; $(LDLIBPTH) $(MAKE) $(CLEAN) -cd x2p; $(LDLIBPTH) $(MAKE) $(CLEAN) -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \ $(LDLIBPTH) sh ext/util/make_ext $(CLEAN) $$x MAKE=$(MAKE) ; \ done
# Some systems do not support "?"\, so keep these files separate. _cleaner2: -rm -f core.*perl.*.? t/core.perl.*.? .?*.c rm -f core *perl.core t/core t/*perl.core rm -f t/misctmp* t/forktmp* t/tmp* t/c t/perl$(EXE_EXT) t/rantests rm -f so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR) rm -rf $(addedbyconf) rm -f $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old makefile.old rm -f $(private) lib/Config.pod rm -rf lib/auto rm -f lib/.exists lib/*/.exists lib/*/*/.exists rm -f h2ph.man pstruct rm -rf .config rm -f preload rm -f testcompile compilelog -rmdir lib/B lib/Data lib/Digest rm -rf lib/Encode -rmdir lib/Filter/Util lib/IO/Socket lib/IO -rmdir lib/List lib/MIME lib/Scalar lib/Sys -rmdir lib/threads lib/XS
_realcleaner: @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=realclean @$(LDLIBPTH) $(MAKE) _cleaner2
_verycleaner: @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=veryclean @$(LDLIBPTH) $(MAKE) _cleaner2 -rm -f *~ *.orig */*~ */*.orig */*/*~ */*/*.orig
# The following lint has practically everything turned on. Unfortunately\, # you have to wade through a lot of mumbo jumbo that can't be suppressed. # If the source file has a /*NOSTRICT*/ somewhere\, ignore the lint message # for that spot.
.PHONY: lint lint: $(c) lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz
# Need to unset during recursion to go out of loop. # The README below ensures that the dependency list is never empty and # that when MAKEDEPEND is empty $(FIRSTMAKEFILE) doesn't need rebuilding.
MAKEDEPEND = Makefile makedepend
$(FIRSTMAKEFILE): README $(MAKEDEPEND) $(MAKE) depend MAKEDEPEND=
config.h: config_h.SH config.sh $(SHELL) config_h.SH
# When done\, touch perlmain.c so that it doesn't get remade each time. .PHONY: depend depend: makedepend sh ./makedepend MAKE=$(MAKE) - test -s perlmain.c && touch perlmain.c cd x2p; $(MAKE) depend
# Cannot postpone this until $firstmakefile is ready ;-) makedepend: makedepend.SH config.sh sh ./makedepend.SH
.PHONY: test check test_prep test_prep_nodll test_prep_pre _test_prep \ test_tty test-tty _test_tty test_notty test-notty _test_notty \ utest ucheck test.utf8 check.utf8 test.torture torturetest \ test.third check.third utest.third ucheck.third test_notty.third \ test.deparse test_notty.deparse test_harness test_harness_notty \ test.bytecompile minitest coretest test.taintwarn
# Cannot delegate rebuilding of t/perl to make # to allow interlaced test and minitest
TESTFILE=TEST
_test_prep: cd t && (rm -f $(PERL)$(EXE_EXT); $(LNS) ../$(PERL)$(EXE_EXT) $(PERL)$(EXE_EXT))
# Architecture-neutral stuff:
test_prep_pre: preplibrary utilities $(nonxs_ext)
test_prep: test_prep_pre miniperl$(EXE_EXT) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL) PERL=./perl $(MAKE) _test_prep
_test_tty: cd t && $(PERL_DEBUG) $(LDLIBPTH) $(PERL) $(TESTFILE) $(TEST_ARGS) \</dev/tty
_test_notty: cd t && $(PERL_DEBUG) PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) $(PERL) $(TESTFILE) $(TEST_ARGS)
# The second branch is for testing without a tty or controlling terminal\, # see t/op/stat.t _test: if (true \</dev/tty) >/dev/null 2>&1; then \ $(MAKE) TEST_ARGS=$(TEST_ARGS) TESTFILE=$(TESTFILE) _test_tty ; \ else \ $(MAKE) TEST_ARGS=$(TEST_ARGS) TESTFILE=$(TESTFILE) _test_notty ; \ fi @echo "Ran tests" > t/rantests
test check: test_prep PERL=./perl $(MAKE) _test
test_tty: test_prep PERL=./perl $(MAKE) _test_tty
test_notty: test_prep PERL=./perl $(MAKE) _test_notty
utest ucheck test.utf8 check.utf8: test_prep PERL=./perl TEST_ARGS=-utf8 $(MAKE) _test
coretest: test_prep PERL=./perl TEST_ARGS=-core $(MAKE) _test
test-prep: test_prep
test-tty: test_tty
test-notty: test_notty
# Torture testing
test.torture torturetest: test_prep PERL=./perl TEST_ARGS=-torture $(MAKE) _test
# Targets for valgrind testing:
test_prep.valgrind: test_prep perl.valgrind PERL=./perl $(MAKE) _test_prep
test.valgrind check.valgrind: test_prep perl.valgrind.config PERL=./perl PERL_DEBUG=PERL_VALGRIND=1 $(MAKE) _test
utest.valgrind ucheck.valgrind: test_prep.valgrind perl.valgrind PERL=./perl PERL_DEBUG=PERL_VALGRIND=1 TEST_ARGS=-utf8 $(MAKE) _test
test_notty.valgrind: test_prep.valgrind perl.valgrind PERL=./perl $(MAKE) PERL_DEBUG=PERL_VALGRIND=1 _test_notty
# Targets for Third Degree testing.
test_prep.third: test_prep perl.third PERL=./perl.third $(MAKE) _test_prep
test.third check.third: test_prep.third perl.third PERL=./perl.third PERL_DEBUG=PERL_3LOG=1 $(MAKE) _test
utest.third ucheck.third: test_prep.third perl.third PERL=./perl.third PERL_DEBUG=PERL_3LOG=1 TEST_ARGS=-utf8 $(MAKE) _test
test_notty.third: test_prep.third perl.third PERL=./perl.third $(MAKE) PERL_DEBUG=PERL_3LOG=1 _test_notty
# Targets for Bytecode/ByteLoader testing.
test.bytecompile: test_prep PERL=./perl TEST_ARGS=-bytecompile $(MAKE) _test
# Targets for Deparse testing.
test.deparse: test_prep PERL=./perl TEST_ARGS=-deparse $(MAKE) _test
test_notty.deparse: test_prep PERL=./perl TEST_ARGS=-deparse $(MAKE) _test_notty
# Targets to run the test suite with -t
test.taintwarn: test_prep PERL=./perl TEST_ARGS=-taintwarn $(MAKE) _test
# Can't depend on lib/Config.pm because that might be where miniperl # is crashing. minitest: miniperl$(EXE_EXT) lib/re.pm -@test -f lib/lib.pm && test -f lib/Config.pm || \ $(MAKE) lib/Config.pm lib/lib.pm @echo " " @echo "You may see some irrelevant test failures if you have been unable" @echo "to build lib/Config.pm or lib/lib.pm." @echo " " - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \ && $(LDLIBPTH) ./perl TEST base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t uni/*.t \</dev/tty
# Test via harness
test_harness: test_prep PERL=./perl $(MAKE) TESTFILE=harness _test
test_harness_notty: test_prep PERL=./perl HARNESS_NOTTY=1 $(MAKE) TESTFILE=harness _test
# Handy way to run perlbug -ok without having to install and run the # installed perlbug. We don't re-run the tests here - we trust the user. # Please *don't* use this unless all tests pass. # If you want to report test failures\, use "make nok" instead.
.PHONY: ok okfile oknack okfilenack nok nokfile noknack nokfilenack
ok: utilities $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)'
okfile: utilities $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F perl.ok
oknack: utilities $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -A
okfilenack: utilities $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F perl.ok -A
nok: utilities $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)'
nokfile: utilities $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -F perl.nok
noknack: utilities $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -A
nokfilenack: utilities $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -F perl.nok -A
.PHONY: clist hlist shlist pllist
clist: $(c) echo $(c) | tr ' ' $(TRNL) >.clist
hlist: $(h) echo $(h) | tr ' ' $(TRNL) >.hlist
shlist: $(sh) echo $(sh) | tr ' ' $(TRNL) >.shlist
pllist: $(pl) echo $(pl) | tr ' ' $(TRNL) >.pllist
Makefile: Makefile.SH ./config.sh $(SHELL) Makefile.SH
.PHONY: distcheck distcheck: FORCE perl '-MExtUtils::Manifest=&fullcheck' -e 'fullcheck()'
.PHONY: elc elc: emacs/cperl-mode.elc
emacs/cperl-mode.elc: emacs/cperl-mode.el -cd emacs; emacs -batch -q -no-site-file -f batch-byte-compile cperl-mode.el
.PHONY: etags ctags tags
etags: TAGS
TAGS: emacs/cperl-mode.elc sh emacs/ptags
ctags: tags
# Let's hope make will not go into an infinite loop on case-unsensitive systems # This may also fail if . is in the head of the path\, since perl will # require -Ilib tags: TAGS perl emacs/e2ctags.pl TAGS > tags
# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE # If this runs make out of memory\, delete /usr/include lines.
Berger\, Daniel (via RT) wrote:
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 *** Error code 1 make: Fatal error: Command failed for target `miniperl'
I don't use gcc\, but from looking at the gcc flags and the linker error mrssage it appears that you are building libperl as LP64 (64-bit) but building miniperlmain as LP32 (32 bit). This has nothing to do with the -L flags\, but I have no clear idea of why it is happening. Have you tries a 'make clean; make'? Perhaps you have an old 32-bit miniperlmain.o lying around from a previous LP32 build?
-- Alan Burlison --
-----Original Message----- From: Alan Burlison [mailto:perlbug-followup@perl.org] Sent: Monday\, November 10\, 2003 3:54 AM To: djberge@qwest.com Subject: Re: [perl #24439] 64 bit build failure on Solaris 9
Berger\, Daniel (via RT) wrote:
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 *** Error code 1 make: Fatal error: Command failed for target `miniperl'
I don't use gcc\, but from looking at the gcc flags and the linker error mrssage it appears that you are building libperl as LP64 (64-bit) but building miniperlmain as LP32 (32 bit). This has nothing to do with the -L flags\, but I have no clear idea of why it is happening. Have you tries a 'make clean; make'? Perhaps you have an old 32-bit miniperlmain.o lying around from a previous LP32 build?
-- Alan Burlison --
No\, it's definitely a clean build. Could the default Perl installation (in /usr/bin) be causing the problem?
Regards\,
Dan
Berger\, Daniel wrote:
No\, it's definitely a clean build. Could the default Perl installation (in /usr/bin) be causing the problem?
I very much doubt it.
What does 'file *.o' say when run in the build directory?
-- Alan Burlison --
On Mon\, 10 Nov 2003\, Alan Burlison wrote:
Berger\, Daniel (via RT) wrote:
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 *** Error code 1 make: Fatal error: Command failed for target `miniperl'
I don't use gcc\, but from looking at the gcc flags and the linker error mrssage it appears that you are building libperl as LP64 (64-bit) but building miniperlmain as LP32 (32 bit).
Yes\, I think that's almost it. Looking closely at the command line issued
gcc -o miniperl miniperlmain.o opmini.o libperl.a [ . . .]
miniperlmain.o is the first object file mentioned. By the time ld gets to it\, ld complains
ld: fatal: file miniperlmain.o: wrong ELF class: ELFCLASS64
That means that ld has seen something earlier that was LP32. I'll bet it was a gcc-specific crt1.o or crtbegin.o. If I recall correctly\, gcc adds those start-up files to the ld command line. If they are 32-bit\, then you'll get the error message above.
If I'm right\, the culprit is this bit in the current hints/solaris_2.sh file: # no changes to ld flags\, as (according to man ld): # # There is no specific option that tells ld to link 64-bit # objects; the class of the first object that gets processed # by ld determines whether it is to perform a 32-bit or a
The problem is that $ldflags are sent to $ld\, which is actually $cc on Solaris (as well as on most modern Unix systems). (It really was ld on SunOS 4.1.3\, where this part of Configure was designed\, and the name has stuck.)
In brief\, although /usr/ccs/bin/ld doesn't need any specific flags\, gcc does need to know which set of start-up files to send to /usr/ccs/bin/ld\, so gcc *does* need a flag.
I don't have gcc-3.3 to test (my Solaris gcc installation is still 2.8.1)\, but I think the following patch should fix it:
Hope this helps,
-- Andy Dougherty doughera@lafayette.edu
Andy Dougherty wrote:
That means that ld has seen something earlier that was LP32. I'll bet it was a gcc-specific crt1.o or crtbegin.o. If I recall correctly\, gcc adds those start-up files to the ld command line. If they are 32-bit\, then you'll get the error message above.
Makes sense. Nice catch :-)
-- Alan Burlison --
-----Original Message----- From: Andy Dougherty [mailto:perlbug-followup@perl.org] Sent: Thursday\, November 20\, 2003 7:38 AM To: djberge@qwest.com Subject: Re: [perl #24439] 64 bit build failure on Solaris 9
On Mon\, 10 Nov 2003\, Alan Burlison wrote:
Berger\, Daniel (via RT) wrote:
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 *** Error code 1 make: Fatal error: Command failed for target `miniperl'
I don't use gcc\, but from looking at the gcc flags and the linker error mrssage it appears that you are building libperl as LP64 (64-bit) but building miniperlmain as LP32 (32 bit).
Yes\, I think that's almost it. Looking closely at the command line issued
gcc \-o miniperl miniperlmain\.o opmini\.o libperl\.a \[ \. \. \.\]
miniperlmain.o is the first object file mentioned. By the time ld gets to it\, ld complains
ld​: fatal​: file miniperlmain\.o​: wrong ELF class​: ELFCLASS64
That means that ld has seen something earlier that was LP32.
I'll bet it was a gcc-specific crt1.o or crtbegin.o. If I recall correctly\, gcc adds those start-up files to the ld command line. If they are 32-bit\, then you'll get the error message above.If I'm right\, the culprit is this bit in the current hints/solaris_2.sh file: # no changes to ld flags\, as (according to man ld): # # There is no specific option that tells ld to link 64-bit # objects; the class of the first object that gets processed # by ld determines whether it is to perform a 32-bit or a
The problem is that $ldflags are sent to $ld\, which is actually $cc on Solaris (as well as on most modern Unix systems). (It really was ld on SunOS 4.1.3\, where this part of Configure was designed\, and the name has stuck.)
In brief\, although /usr/ccs/bin/ld doesn't need any specific flags\, gcc does need to know which set of start-up files to send to /usr/ccs/bin/ld\, so gcc *does* need a flag.
I don't have gcc-3.3 to test (my Solaris gcc installation is still 2.8.1)\, but I think the following patch should fix it:
--- perl-5.8.2/hints/solaris_2.sh Mon Oct 27 12:27:29 2003 +++ perl-5.8.2-andy/hints/solaris_2.sh Thu Nov 20 09:24:38 2003 @@ -516\,14 +516\,13 @@ loclibpth="/usr/lib/sparcv9 $loclibpth" ccflags="$ccflags -mcpu=v9 -m64" if test X`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null` != X; then + # This adds in -Wa\,-xarch=v9. I suspect that's superfluous\, + # since the -m64 above should do that already. Someone + # with gcc-3.x.x\, please test with gcc -v.
A.D. 20-Nov-2003 ccflags="$ccflags -Wa\,`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`" fi - # no changes to ld flags\, as (according to man ld): - # - # There is no specific option that tells ld to link 64-bit - # objects; the class of the first object that gets processed - # by ld determines whether it is to perform a 32-bit or a - # 64-bit link edit. + ldflags="$ldflags -m64" + lddlflags="$lddlflags -m64" ;; *) ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"Hope this helps\,
-- Andy Dougherty doughera@lafayette.edu
Thanks Andy. I made the changes you suggested. We're getting further\, but now it's choking on 'B':
Making B (dynamic)
Writing Makefile for B::C
Writing Makefile for B
cp B/Stash.pm ../../lib/B/Stash.pm
cp B/Asmdata.pm ../../lib/B/Asmdata.pm
cp B/C.pm ../../lib/B/C.pm
cp B/Deparse.pm ../../lib/B/Deparse.pm
cp B/Debug.pm ../../lib/B/Debug.pm
cp B/cc_harness ../../lib/B/cc_harness
cp B.pm ../../lib/B.pm
cp B/Bblock.pm ../../lib/B/Bblock.pm
cp B/Assembler.pm ../../lib/B/Assembler.pm
cp B/Terse.pm ../../lib/B/Terse.pm
cp B/CC.pm ../../lib/B/CC.pm
cp O.pm ../../lib/O.pm
cp B/Concise.pm ../../lib/B/Concise.pm
cp B/Lint.pm ../../lib/B/Lint.pm
cp B/Showlex.pm ../../lib/B/Showlex.pm
cp B/Bytecode.pm ../../lib/B/Bytecode.pm
cp B/Disassembler.pm ../../lib/B/Disassembler.pm
cp B/assemble ../../lib/B/assemble
cp B/Xref.pm ../../lib/B/Xref.pm
cp B/Stackobj.pm ../../lib/B/Stackobj.pm
cp B/disassemble ../../lib/B/disassemble
cp B/makeliblinks ../../lib/B/makeliblinks
../../../miniperl "-I../../../lib" "-I../../../lib"
/usr/local/src/perl-5.8.2/lib/ExtUtils/xsubpp -typemap
../../../lib/ExtUtils/typemap C.xs > C.xsc && mv C.xsc C.c
gcc -c -D_REENTRANT -mcpu=v9 -m64 -fno-strict-aliasing
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O
-DVERSION=\"1.02\" -DXS_VERSION=\"1.02\" -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 -m64 -L/usr/lib/sparcv9 -L/usr/local/lib C.o -o
../../../lib/auto/B/C/C.so
Undefined first referenced
symbol in file
Perl_safesysmalloc C.o
Perl_Tmarkstack_ptr_ptr C.o
Perl_Tstack_sp_ptr C.o
Perl_sv_free C.o
Perl_hv_store_ent C.o
Perl_get_sv C.o
Perl_sv_setiv C.o
Perl_Isig_pending_ptr C.o
Perl_sv_setref_iv C.o
Perl_despatch_signals C.o
Perl_Tstack_base_ptr C.o
Perl_Irunops_ptr C.o
Perl_sv_2pv_flags C.o
Perl_Ttainted_ptr C.o
Perl_get_hv C.o
Perl_newSViv C.o
Perl_Iregex_pad_ptr C.o
main
/usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.3.2/sparcv9/crt1.o
Perl_Top_ptr C.o
Perl_Gthr_key_ptr C.o
Perl_croak C.o
Perl_Isv_yes_ptr C.o
Perl_form C.o
ld: fatal: Symbol referencing errors. No output written to
../../../lib/auto/B/C/C.so
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target
`../../../lib/auto/B/C/C.so' Current working directory
/usr/local/src/perl-5.8.2/ext/B/C
*** Error code 1
make: Fatal error: Command failed for target `subdirs'
Current working directory /usr/local/src/perl-5.8.2/ext/B
*** Error code 1
make: Fatal error: Command failed for target `lib/auto/B/B.so'
The only warning I saw during the build that I thought might be significant was this one:
gcc -m64 -L/usr/lib/sparcv9 -L/usr/local/lib -o miniperl \ miniperlmain.o opmini.o libperl.a -lsocket -lnsl -ldl -lm -lpthread -lc ./miniperl -w -Ilib -MExporter -e '\<?>' || make minitest *** Error code 1 (ignored)
I also tried commenting out the -Wa\, -xarch stuff in the solaris hint file\, but that (unsurprisingly) didn't matter.
Any ideas? Something about crt1.o again?
Regards\,
Dan
(Sorry if this is a repeat - mail problems here)
On Thu\, 20 Nov 2003\, Daniel Berger wrote:
From: Andy Dougherty [mailto:perlbug-followup@perl.org]
I don't have gcc-3.3 to test (my Solaris gcc installation is still 2.8.1)\, but I think the following patch should fix it:
--- perl-5.8.2/hints/solaris_2.sh Mon Oct 27 12:27:29 2003 +++ perl-5.8.2-andy/hints/solaris_2.sh Thu Nov 20 09:24:38 2003 @@ -516\,14 +516\,13 @@ loclibpth="/usr/lib/sparcv9 $loclibpth" ccflags="$ccflags -mcpu=v9 -m64" if test X`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null` != X; then + # This adds in -Wa\,-xarch=v9. I suspect that's superfluous\, + # since the -m64 above should do that already. Someone + # with gcc-3.x.x\, please test with gcc -v. A.D. 20-Nov-2003 ccflags="$ccflags -Wa\,`getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`" fi - # no changes to ld flags\, as (according to man ld): - # - # There is no specific option that tells ld to link 64-bit - # objects; the class of the first object that gets processed - # by ld determines whether it is to perform a 32-bit or a - # 64-bit link edit. + ldflags="$ldflags -m64" + lddlflags="$lddlflags -m64" ;; *) ccflags="$ccflags `getconf XBS5_LP64_OFF64_CFLAGS 2>/dev/null`"
Hope this helps\,
-- Andy Dougherty doughera@lafayette.edu
Thanks Andy. I made the changes you suggested. We're getting further\, but now it's choking on 'B':
LD_RUN_PATH="" gcc -m64 -L/usr/lib/sparcv9 -L/usr/local/lib C.o -o ../../../lib/auto/B/C/C.so Undefined first referenced symbol in file Perl_safesysmalloc C.o Perl_Tmarkstack_ptr_ptr C.o
Oh. This one's my fault. Try changing the line
+ lddlflags="$lddlflags -m64"
in hints/solaris_2.sh to
+ lddlflags="$lddlflags -G -m64"
(I think that's the right flag for gcc on Solaris using Sun's ld.)
Andy Dougherty doughera@lafayette.edu
-----Original Message----- From: Andy Dougherty [mailto:doughera@lafayette.edu] Sent: Friday\, November 21\, 2003 7:36 AM To: Daniel Berger Cc: perlbug-followup@perl.org Subject: RE: [perl #24439] 64 bit build failure on Solaris 9
\
LD_RUN_PATH="" gcc -m64 -L/usr/lib/sparcv9 -L/usr/local/lib C.o -o ../../../lib/auto/B/C/C.so Undefined first referenced symbol in file Perl_safesysmalloc C.o Perl_Tmarkstack_ptr_ptr C.o
Oh. This one's my fault. Try changing the line
+ lddlflags="$lddlflags -m64"
in hints/solaris_2.sh to
+ lddlflags="$lddlflags -G -m64"
(I think that's the right flag for gcc on Solaris using Sun's ld.)
Andy Dougherty doughera@​lafayette\.edu
That worked! Thanks!!!
Regards\,
Dan
Andy Dougherty wrote:
Oh. This one's my fault. Try changing the line
+ lddlflags="$lddlflags -m64"
in hints/solaris_2.sh to
+ lddlflags="$lddlflags -G -m64"
(I think that's the right flag for gcc on Solaris using Sun's ld.)
Thanks\, applied as #21780 to bleadperl.
@rgs - Status changed from 'new' to 'resolved'
Migrated from rt.perl.org#24439 (status was 'resolved')
Searchable as RT24439$