在OS X上创buildHaskell共享库

我试图从Haskell源代码创build一个共享库。

我试过按照这里的说明: http : //weblog.haskell.cz/pivnik/building-a-shared-library-in-haskell/但我只是没有任何运气。

当我用Haskell 64位(从2011.4.0.0 ghc 7.0.4)编译我得到以下错误:

ld: pointer in read-only segment not allowed in slidable image, used in ___gmpn_modexact_1c_odd 

作为替代scheme,我也尝试了32位版本,并根据确切的标志,我用链接获取错误,如:

 Library not loaded: /usr/local/lib/ghc-7.0.4/base-4.3.1.0/libHSbase-4.3.1.0-ghc7.0.4.dylib 

我确实设法通过在链接器行中添加-lHSrts来进一步实现。 这让我到成功链接和加载库的点,但我无法find函数名称使用dlsym(或手动使用nm | grep)

任何提示将不胜感激,一个例子make文件,或构build线已经成功地build立(和使用)在OS X共享库将不胜感激。 对于Haskell来说,我是个新手,不知道是否应该继续敲我的脑袋,假设问题出在我身上,或者出于各种原因,我不希望这个问题能够在OS X上运行。

我已经尝试过的所有组合的git回购可在这里: https : //github.com/bennoleslie/haskell-shared-example我做了一些工作的32位ghc,但不是64位呢。

可以在64位OS X上创build工作共享库,最新的Haskell平台版本(2012.4 64位)

调用行适用于我:

 ghc -O2 --make \ -no-hs-main -optl '-shared' -optc '-DMODULE=Test' \ -o libTest.so Test.hs module_init.c 

module_init.c应该是这样的:

 #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(); } 

这个git repo: https : //github.com/bennoleslie/haskell-shared-example包含一个工作示例。

所有功劳都归功于这个原始的资料来源: http : //weblog.haskell.cz/pivnik/building-a-shared-library-in-haskell/

你可能想尝试在Homebrew的ghc端口 – https://github.com/mxcl/homebrew/blob/master/Library/Formula/ghc.rb