[Haskell-cafe] Building foreign shared libraries with Cabal
Albert Y. C. Lai
trebla at vex.net
Sat Apr 26 18:00:04 UTC 2014
On 14-04-21 04:25 AM, Nikolay Amiantov wrote:
> I want to use cabal to build and install shared library, which will be
> called from C. I've already found necessary combination of flags and
> options to successfully build it, but now I have two main issues:
>
> 1) The library is installed into "bin".
> 2) The generated "stub" C headers are not installed at all.
>
> How can I resolve this? My current options is as follows:
>
> executable libtest.so
[...]
See my http://www.vex.net/~trebla/haskell/so.xhtml for how to use
"library" instead. It has the advantage of needing no ghc-options or
cc-options, and installing into "lib/xxx-1.0/ghc-n.n.n". It has the
disadvantage of losing control over the filename---it must be
"libHSxxx-1.0-ghcn.n.n.so".
Combine "include-dirs" and "install-includes" for the C header. It will
be installed into "lib/xxx-1.0/ghc-n.n.n/include". However, you have a
dilemma:
* If you use the generated file under dist/build, cabal warns you that
dist/build is not to be relied upon, and it is right. Also, it depends
too much on HsFFI.h.
* If you hand-write the file yourself, you worry that it mismatches the
Haskell export, and you are right.
More information about the Haskell-Cafe
mailing list