[erlang-questions] : build 64bit Erlang on Solairs

Raimo Niskanen <>
Mon May 5 15:16:22 CEST 2008


On Thu, May 01, 2008 at 11:37:09PM +0800, Raymond Xiong wrote:
> On 05/01/08, Mikael Pettersson wrote:
> >  > 
> >  > gcc -o /export/erlang/usr/src/cmd/erlang/root/otp_src_R12B-1/bin/sparc-sun-solaris2.11/beam.smp -R/usr/lib/64 -L/usr/lib/64 obj/sparc-sun-solaris2.11/opt/smp/erl_main.o ...(snipped)
> >  > ld: fatal: file obj/sparc-sun-solaris2.11/opt/smp/erl_main.o:
> >  > wrong ELF class: ELFCLASS64
> >  > 
> >  > >From what I know, the above error message means that ld was
> >  > trying to generate 32bit binary file, but found the object
> >  > files passed to it were 64bit files.
> >  > 
> >  > According to ld(1) man page on Solaris, ld can guess to generate
> >  > 32bit binary file or 64bit binary file: 
> > 
> > But the command above is not ld but gcc, and gcc requires -m64 to
> > produce a 64-bit executable if its default is 32-bit. What happens
> > is that gcc passes more options to ld than just the object file names,
> > and typically one of those options selects the executable format.
> > Hence gcc needs to be told if you want a non-default format.
> 
> Mikael,
> 
> Thanks for the information, I had thought gcc just let ld to
> decide that.
> 
> If so, however, isn't it better to add CFLAGS in the follwing
> line in erts/emulator/Makefile.in?
> 
> $(BINDIR)/$(EMULATOR_EXECUTABLE): $(INIT_OBJS) $(OBJS)
>         $(PURIFY) $(LD) -o $(BINDIR)/$(EMULATOR_EXECUTABLE) \
>         $(HIPEBEAMLDFLAGS) $(LDFLAGS) $(DEXPORT) $(INIT_OBJS) $(OBJS) $(LIBS)
> 

It sounds weird to add CFLAGS to the LD command line.

> > 
> > [snip]
> >  > I guess there must be many people who compile 64bit Erlang on
> >  > Solaris, I googled this but only found this thread, which
> >  > sugested to hard code gcc to "gcc -m64": 
> >  > 
> >  >     http://www.erlang.org/pipermail/erlang-questions/2006-July/021336.html
> >  > 
> >  > I suppose there must be a better way than that?
> > 
> > env CFLAGS='-m64 -O2' LDFLAGS=-m64 ./configure ; make
> > 
> > also works; I just did that to build R12B-2 on a Solaris 10 box.
> 
> Yes, I believe it would work(I haven't try it on my SPARC box yet,
> because the machine is slow and it takes more than half an hour
> to finish).
> 
> However, I doubt if you can enable ssl support. I expect the
> following command would fail because mixing of 32-bit objects
> and 64-bit objects is not permitted:
> 
>   env CFLAGS='-m64 -O2' LDFLAGS=-m64 ./configure --with-ssl=/usr/sfw \
>   --enable-dynamic-ssl-lib ; make
> 
> 64bit ssl lib is under /usr/sfw/lib/64, do you have any suggestion
> on how to let Erlang use 64bit ssl lib under that subdir(but header
> files are still under /usr/sfw/include of course)?
> 

In our nightly builds we have a directory early in the path
that contains two scripts, essentially:
gcc:
	#! /bin/sh
	exec /usr/local/pgm/.../bin/gcc -m64 ${1+"$@"}
ld:
	#! /bin/sh
	exec /usr/ccs/bin/ld -64 ${1+"$@"}
and we set:
PATH=/usr/local/bin:/usr/sfw/bin:...
LD_LIBRARY_PATH=/usr/local/lib:/usr/sfw/lib
LD_LIBRARY_PATH_64=/usr/sfw/lib/64

We have it building and running, but it is not a pretty solution.

> > 
> > The advantage of "env CC=gcc64 ./configure; make" is that
> > you don't have to worry about missing some *FLAGS variable.
> > 
> 
> Yes, as a user I understand that, but I am building a package 
> for OpenSolaris, so I need a more formal way.
> 
> Thanks for your help!
> 
> -- 
> Regards,
> Raymond
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list