caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Clemens Hintze <cle-ocaml@qiao.in-berlin.de>
To: Christophe TROESTLER <debian00@tiscalinet.be>
Cc: "O'Caml Mailing List" <caml-list@inria.fr>
Subject: Re: [Caml-list] Link with C++ code
Date: Wed, 21 Nov 2001 08:12:01 +0100	[thread overview]
Message-ID: <20011121081201.A52894@qiao.in-berlin.de> (raw)
In-Reply-To: <20011120.234149.54715310.debian00@tiscalinet.be>

On Tue, Nov 20, 2001 at 11:41:49PM +0100, Christophe TROESTLER wrote:
> Hi all,

Hi you,

> I am trying to use some C++ code from OCaml.  I am completely
> inexperienced at this (and not knowing well C++ to make matters worse)
> but in view of http://caml.inria.fr/Hump/msg778-782 that didn't seem
> so difficult.  I will likely have more questions later but I am
> already stuck at the beginning.  Indeed, the C++ code includes the
> file "stl_alloc.h" which contains (gnu version, line 451)

does this mean, *you* are including "stl_alloc.h" directly? This you
should not do. You should not include any "stl_XXX.h" file. If you did
not please forgive me.

What you can do depends a bit on the version of the compiler you use
right now. The closest-to-standard G++ should be the 3.x chain of GCC.
Here all symbols of the STL are located in namespace 'std'. If your
code do *not*

  using namespace std;

you should not have problems then. Only, your code has to write
std::whatever in front of every STL datatype you use.

Other versions of GCC are not that close to the standard. They will
simply obey and ignore the 'std' identifier the same time :-(

> What can I do ?

You could try to wrap the OCaml stuff into a namespace, propably.
Like this:

  namespace ocaml {
    extern "C" {
  #   include <caml/alloc.h>
    }
  }

  int main(int argc, char* argv[])
  {
    :
    m = ocaml::alloc(...);
    :
  }


HTH,
Clemens.

PS: Perhaps the OCaml headers could take sorrow on their own to wrap
    appropiate if included by an C++ compiler? Like this:

    #ifdef __cplusplus
    namespace OCaml {                /* (1) */
    extern "C" {
    #endif
    
    /* Normal header file contents goes here */

    #ifdef __cplusplus
    } /* end of extern "C" */
    } /* end of namespace OCaml */   /* (1) */
    #endif

    Perhaps a bit more adaption would necessary if using lines (1)?  
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


      reply	other threads:[~2001-11-21  7:15 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-11-20 22:41 Christophe TROESTLER
2001-11-21  7:12 ` Clemens Hintze [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20011121081201.A52894@qiao.in-berlin.de \
    --to=cle-ocaml@qiao.in-berlin.de \
    --cc=caml-list@inria.fr \
    --cc=debian00@tiscalinet.be \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).