List Info

Thread: "ocaml_beginners":: compiled on some machine on another one




"ocaml_beginners":: compiled on some machine on another one
country flaguser name
France
2008-03-20 05:04:23

Hello,

I've tried to use file.cm[io] on a linux box (say host1) on a sun
ultra-sparc (say host2).

I get the following error on host2 :

# #load "file.cmo";;
The files file.cmo
and /usr/local/bin/ocaml
disagree over interface Pervasives
#

I suspect a problem of version since file.cm[io] have been compiled
with ocaml 3.10.0 on host1 whereas host1 provides only ocaml 3.09.3.

Is there anything I can do to be able to use file.cm[io] on host2 ?
(except upgrading to ocaml 3.10.0 on host2 : it's a running server I
can't touch for the moment).

-- Frnçs

__._,_.___
.

__,_._,___
Re: "ocaml_beginners":: compiled on some machine on another one
country flaguser name
United Kingdom
2008-03-20 08:43:37

ON THU, MAR 20, 2008 AT 11:04:23AM +0100, FRAN?½OIS PUITG WROTE:
> I'VE TRIED TO USE FILE.CM[IO] ON A LINUX BOX (SAY HOST1) ON A SUN
> ULTRA-SPARC (SAY HOST2).
>
> I GET THE FOLLOWING ERROR ON HOST2 :
>
> # #LOAD "FILE.CMO";;
> THE FILES FILE.CMO
> AND /USR/LOCAL/BIN/OCAML
> DISAGREE OVER INTERFACE PERVASIVES
> #
>
> I SUSPECT A PROBLEM OF VERSION SINCE FILE.CM[IO] HAVE BEEN COMPILED
> WITH OCAML 3.10.0 ON HOST1 WHEREAS HOST1 PROVIDES ONLY OCAML 3.09.3.

YOU WERE ACTUALLY LUCKY THAT YOU GOT AN ERROR MESSAGE. IT COULD JUST
AS EASILY HAVE BEEN A SEGFAULT.

*.CMI & *.CMO FILES CONTAIN INTERNAL COMPILER STRUCTURES, SERIALIZED
INTO A FILE USING THE MARSHAL MODULE. MARSHAL IS UNSAFE IF THE TYPES
OF WHAT YOU MARSHAL CHANGE AT ALL, AND SINCE THESE STRUCTURES CHANGE
WITH EACH COMPILER RELEASE (EVEN POINT RELEASES), THERE IS NO
COMPATIBILITY AT ALL.

YOU NEED TO HAVE IDENTICAL COMPILER VERSIONS -- SAY 3.10.0 ON BOTH OR
3.09.3 ON BOTH. BUT IT'S BETTER TO COMPILE FROM SOURCE (IN FACT I
SUSPECT IF YOU ASK INRIA THEY'LL TELL YOU TO COMPILE FROM SOURCE IN
ALL CASES).

A DIFFERENT ASPECT TO THIS IS WHETHER A *.CM[IO] FILE COMPILED ON A
LINUX BOX WOULD WORK ON A SUN BOX WITH THE SAME OCAML VERSION, IF THE
LINUX BOX AND SUN BOX HAD DIFFERENT ENDIANNESS OR WORD SIZE. THE
ANSWER HERE IS (SURPRISINGLY) YES - IT WILL WORK. MARSHAL IS SAFE
AGAINST ENDIANNESS AND WORD SIZE CHANGES. I TESTED THIS RECENTLY BY
COMPILING SOME MODULE ON I386, X86-64, PPC AND PPC64 AND COMPARING THE
RESULTING *.CMO FILES, AND THEY WERE INDEED IDENTICAL.

AND A FINAL POINT: *.CMI & *.CMO FILES CAN BE TRANSFERRED BETWEEN
UNIX-LIKE SYSTEMS (LINUX, SOLARIS, MACS), BUT NOT BETWEEN *NIX AND
WINDOWS. THE REASON IS THAT THE STDLIB IS COMPILED DIFFERENTLY ON
WINDOWS. IN PARTICULAR THE 'UNIX' (REALLY POSIX) MODULE ON WINDOWS
HAS IIRC A DIFFERENT SIGNATURE. ON *NIX SYSTEMS IT JUST MAKES DIRECT
POSIX CALLS, BUT ON WINDOWS IT HAS TO DO A WHOLE LOT OF EMULATION.

RICH.

--
RICHARD JONES
RED HAT

__._,_.___
.

__,_._,___
Re: "ocaml_beginners":: compiled on some machine on another one
country flaguser name
France
2008-03-20 08:45:40

De Remi Vanicat (20 March, 14:21) :

>; "François Puitg"; < francois.puitg%40imag.fr">francois.puitgimag.fr&gt; writes:
>
> > I suspect a problem of version since file.cm[io] have been compiled
> > with ocaml 3.10.0 on host1 whereas host1 provides only ocaml 3.09.3.
> >
> > Is there anything I can do to be able to use file.cm[io] on host2 ?
> > (except upgrading to ocaml 3.10.0 on host2 : it's a running server I
> > can't touch for the moment).
>
> you can donwgrad to ocaml 3.09.3 on host1. There is no other solution
> that are officially supported by INRIA
>
> --
> Rémi Vanicat

OK, thanks.

__._,_.___
.

__,_._,___
[1-3]

about | contact  Other archives ( Real Estate discussion Medical topics )