Am Dienstag, den 06.07.2010, 17:36 -0400 schrieb Taylor Venable:
> Hi there, I'm thinking of writing some programs in OCaml to assist a
> custom build infrastructure (currently 95% Tcl, 5% external Lua
> programs) that we use at work.  Since we build on Windows, Mac, and
> Linux I have to make sure that whatever I end up writing works in all
> three.  I haven't written much OCaml in my life, and the little that I
> did was probably five years ago, but any tools I write will have to be
> usable for a while.  So I tried compiling OCaml 3.12.0+beta1 in Cygwin
> 1.7.5 -- the information I found about it seemed to imply that it
> should work.  I put flexdll in the PATH and I was able to use the
> configure script and "make world.opt" with only a single problem:
> there were lots of linker errors when it came to building
> tools/objinfo_helper.exe, symbols like _lbasename, _sch_istable, and
> _objalloc_free could not be found.  [I'd paste the full error but I
> forgot to email it to my private address today and the machine is in
> corporate lockdown mode, so I can't access it right now, but I can
> obtain it tomorrow at work if anybody would like to see the full
> message.]  The way to fix it, for me anyway, was to modify the
> definition of LIBBFD_LINK in config/Makefile (which started out as
> "-lbfd -ldl") to append to it "-lintl -lz /usr/lib/libiberty.a"; and
> after that everything worked.  I don't know if that constitutes a
> problem with the configure script or just something about how my
> Cygwin is installed, but I wanted to mention it somewhere in case it
> was a bug.
> 
> In addition to that, I have a question: is bytecode compatible across
> operating systems and/or CPU architectures?  In other words, if I
> compile to bytecode on Linux/x86, can I run that using ocamlrun on
> Windows/x86 or Linux/amd64?

Trivial programs: yes. (As "trivial" as the ocaml compiler which uses
the same bytecode to bootstrap on all platforms.) There is a problem
with some libraries, however, because they differ by platform, for
example the unix library (i.e. unix.cma is different on Linux and
Windows).

You can try to work around by linking ad-hoc, but you need the "ocaml"
executable then, e.g.

ocaml unix.cma your_library.cma your_script.ml

which then links with the unix.cma that is locally installed, and
immediately runs the program. At least the module checksums for unix.cma
should be identical on all platforms.

Gerd
-- 
------------------------------------------------------------
Gerd Stolpmann, Bad Nauheimer Str.3, 64289 Darmstadt,Germany 
g...@gerd-stolpmann.de          http://www.gerd-stolpmann.de
Phone: +49-6151-153855                  Fax: +49-6151-997714
------------------------------------------------------------

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to