[m-users.] Building Mercury Modules with Functions to be Called from C

Julien Fischer jfischer at opturion.com
Wed Sep 12 23:27:17 AEST 2018


Hi Charles,

On Wed, 12 Sep 2018, Charles Shuller wrote:

> When attempting to build a library of mercury functions to be called
> from C, I wind up individually compiling to C, then using C tools for
> everything else.   Is there a better approach??

Yes.

> What I've got working in my Proof of Concept is to compile each module separately with:
> 
>    mmc --grade hlc --compile-to-c  min.m
> 
> And then use my C compiler (gcc) on the output C file.

That's likely to be error prone; Mercury is very particular about
how it uses the C compiler.

> In larger apps, I'd like to try and mirror the approach I use with C,
> which is to build a convenience library (i.e. a static lib that is
> only ever used by main and unit tests of the project, and is
> statically linked against) and call into mercury modules from there.

See the example in samples/c_interface/standalone_c for how to call
Mercury from external C and C++ code; the approach used there should
extend fairly easily to the situation you describe.

(The documentation for that sample is in the Makefile in that
directory.)

> I thought there was a command that would easily do that, something
> like:  mmc --make my_lib.a, but I can't find the docs anymore. 

The command should be:

     $ mmc --make libmy_lib.a

With mmc --make targets for building libraries must have the prefix
"lib" in front of them.

(See the section 6.2 ``Building with mmc --make'' in the User's guide.)

Julien.


More information about the users mailing list