[Haskell-cafe] Undefined symbol error coming from shared, dynamic library.
Sergiy Nazarenko
nazarenko.sergiy at gmail.com
Wed Sep 14 18:14:35 CEST 2011
Hi, Captain !
I got haskell shared libraries with following cabal command:
cabal install --global --reinstall --disable-library-profiling
--enable-shared --ghc-option=-dynamic mtl
and so on.
It allowed me to get haskell libraries and I could compile my own
shared libraries. And ldd helps me to know which libraries need me to
use them on users computers with my library. I believe this cabal
options can set in ~/.cabal/config or somethisg like this. In my case
I merely create shell script and call it cabal-shared.sh. :)
There is my options to compile my library:
ghc -O2 --make -no-hs-main -dynamic -shared -fPIC -optl '-shared'
-optc '-DMODULE=MyLibModule' -o MyLibModule.so MyLibModule.hs
module_init.c -optl-Wl -lHSrts-ghc7.0.2
where module_init.c has contents:
#define CAT(a,b) XCAT(a,b)
#define XCAT(a,b) a ## b
#define STR(a) XSTR(a)
#define XSTR(a) #a
#include <HsFFI.h>
extern void CAT (__stginit_, MODULE) (void);
static void library_init (void) __attribute__ ((constructor));
static void library_init (void)
{
/* This seems to be a no-op, but it makes the GHCRTS envvar work. */
static char *argv[] = { STR (MODULE) ".so", 0 }, **argv_ = argv;
static int argc = 1;
hs_init (&argc, &argv_);
hs_add_root (CAT (__stginit_, MODULE));
}
static void library_exit (void) __attribute__ ((destructor));
static void library_exit (void) { hs_exit (); }
Cheers,
Sergiy
More information about the Haskell-Cafe
mailing list