gnucobol-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [open-cobol-list] Calling C++ from GNU COBOL


From: Brian Tiffin
Subject: Re: [open-cobol-list] Calling C++ from GNU COBOL
Date: Thu, 6 Nov 2014 11:16:50 -0500

On 11/5/14, Scott McKellar <address@hidden> wrote:
> Is it possible to call C++ routines (declared of course as extern "C") from
> GNU COBOL?  Do we need to use the version that emits C++, or can we use the
> version that emits C?

Yes, and no you don't need GnuCOBOL-CPP for this.  As long as there is
an unmangled entry point, (extern "C") for the linker, it all works.

>
> Context: I'm trying to evaluate a possible migration to GNU COBOL from an
> expensive proprietary COBOL compiler (currently running Linux, RedHat
> 4.1.2).  Many of our existing COBOL programs rely on C++ routines for
> various things, especially for parsing XML.  I really don't want to have to
> rewrite all that stuff in some other language.
>
> What concerns me most is the initialization of static objects.  For example,
> std::cout is a statically allocated instance of an ostream.  It needs to be
> initialized before use (to connect it to standard output).
>
> If the main program is in C++, the C++ compiler can give it special
> treatment to ensure that static objects are initialized before control
> enters main().  If the main program is in some other language, we still need
> the same kind of magic, or else static objects won't get initialized.

This could be tricky.  The pre-init issue will need some looking into,
but it'll be a do-able thing.

As an example (and I just noticed the code listing repo has gone
stale, so I'll fix that soon), see
http://opencobol.add1tocobol.com/gnucobol/#can-gnucobol-interface-with-falcon-pl

Falcon is written in C++ and all that was required for embedding in
GnuCOBOL was an extern "C" wrapped entry point.

While the first GUI will be GTK+, there are long term plans to include
a layer for Qt, and aside from the wrappers to get entry points to the
linker, has tested out ok.

>
> Our current compiler provides this magic if you feed it the right compile
> option.  I don't see a similar option for GNU COBOL.

There isn't really, but C can be made to play nice with C++, so it'll
be possible with GnuCOBOL as well.

>
> So far I've been playing with GNU COBOL 1.1, compiled from source.  I tried
> a Hello World program that called a little C++ program, but it didn't get
> past the link because it couldn't find the library for std::cout.  I can
> probably find a way to make the link work, but if I do, I suspect that
> std::cout won't work.

It should, but may require an extra call or two.

>
> I understand that there is a GNU COBOL CPP from Sergey that emits C++
> instead of C.  In that case we could presumably call C++ routines as we do
> today and any static objects would be healthy.

Yep.

>
> However I get the impression that the CPP version is a recent development
> and may still be bleeding-edge.  Ours is a big corporate shop; bleeding
> edges make people nervous.

Yep.

>
>
>     * Is there a way to call C++ safely from GNU COBOL 1.1, or do we have to
> use the CPP version?

I'm going to say yes, but you've raised issues that will require an
experiment or two.

>
>     * Is the CPP version considered production-ready?  Is anyone using it
> successfully in a large-scale production environment?

Sergey could answer that one better, but yes I believe so.

>
> Scott McKellar
>

Cheers,
Brian


reply via email to

[Prev in Thread] Current Thread [Next in Thread]