Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.98k stars 560 forks source link

64 bit build failure on Solaris 9 #6902

Closed p5pRT closed 20 years ago

p5pRT commented 21 years ago

Migrated from rt.perl.org#24439 (status was 'resolved')

Searchable as RT24439$

p5pRT commented 21 years ago

From djberge@qwest.com

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.

p5pRT commented 21 years ago

From @AlanBurlison

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

p5pRT commented 20 years ago

From djberge@qwest.com

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

p5pRT commented 20 years ago

From @AlanBurlison

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

p5pRT commented 20 years ago

From @doughera88

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​:

Inline Patch ```diff --- 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

p5pRT commented 20 years ago

From @AlanBurlison

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

p5pRT commented 20 years ago

From djberge@qwest.com

-----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&#8203;: fatal&#8203;: file miniperlmain\.o&#8203;: wrong ELF class&#8203;: 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)

p5pRT commented 20 years ago

From @doughera88

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

p5pRT commented 20 years ago

From djberge@qwest.com

-----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@&#8203;lafayette\.edu

That worked! Thanks!!!

Regards\,

Dan

p5pRT commented 20 years ago

From @rgs

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.

p5pRT commented 20 years ago

@rgs - Status changed from 'new' to 'resolved'