Re: problem with ocamlmktop -output-obj

From: Thierry Bravier (
Date: Mon Oct 26 1998 - 17:03:30 MET

Message-Id: <>
Date: Mon, 26 Oct 1998 17:03:30 +0100
From: Thierry Bravier <>
Subject: Re: problem with ocamlmktop -output-obj

Thierry Bravier wrote:
> I must now face a problem:
> It would be really nice if I could use -custom but ...
> How can I ask ocamlc -custom to :
> 1) use a user-provided compiled main() (potentially compiled with C++)
> 2) link with a user-provided linker (aka g++)
> 3) I know that internally, some C code is output and compiled
> (for the external primitives I think), I think this code should
> still be compiled with the C compiler used to build ocaml.
> Are there any clues to help me build this toplevel with C++ code
> without -output-obj ?
> Thanks

Here is a suggestion so that I can link ML with C++
and avoid using -output-obj when I don't need it (particularly
to build a toplevel).

with two new options for ocamlc, one could choose ...

* ocamlc -cc my-ccompiler
  ... an alternative C compiler internally used
  to compile the internal primitive table and other C codes.
* ocamlc -clinker my-clinker
  ... an alternative linker used to link native objects before
  concatenation of ocaml cmo files
  this one is most important to C++ users because it makes it
  possible to let a C++ tool link object files.

I have emulated this thanks to an ugly hack that I would like
to remove. I have made my local gcc startup script
read an environment variable and link with another
linker when the variable is set (in my case, a C++ linker).

It gives me the ability to build a C++/ML program (or toplevel) with
ocamlc (or ocamlmktop) -custom which is just what I need.

I also have a request about the toplevel module:

The #quit directive happens to call directly exit
this is a problem if the toplevel is embedded in a C (or C++)
main () function because after #quit, the program
exits instead of finishing main ()'s code.

In the case of C++ it's even worse because destructors are
not called.

I would suggest an internal toplevel_exit exception
raised by #quit
and handled by the toplevel loop to return properly from caml_main ()

Thank you.

Thierry Bravier                     Dassault Aviation - DGT / DPR / DESA
78, Quai Marcel Dassault              F-92214 Saint-Cloud Cedex - France
Telephone : (33) 01 47 11 53 07          Telecopie : (33) 01 47 11 52 83
E-Mail :           

This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:16 MET