macos - descargar - Crear bibliotecas compartidas Haskell en OS X
install haskell brew (2)
Es posible crear bibliotecas compartidas que funcionen en OS X de 64 bits, con la última versión de la plataforma Haskell (2012.4 64 bits)
La línea de invocación funciona para mí:
ghc -O2 --make /
-no-hs-main -optl ''-shared'' -optc ''-DMODULE=Test'' /
-o libTest.so Test.hs module_init.c
module_init.c
debería ser algo así como:
#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();
}
Este git repo: https://github.com/bennoleslie/haskell-shared-example contiene un ejemplo de trabajo.
Todo el crédito va a esta fuente original: http://weblog.haskell.cz/pivnik/building-a-shared-library-in-haskell/
Intento crear una biblioteca compartida a partir del código fuente de Haskell.
Intenté seguir las instrucciones aquí: http://weblog.haskell.cz/pivnik/building-a-shared-library-in-haskell/ pero no estoy teniendo suerte.
Cuando compilo con Haskell de 64 bits (ghc 7.0.4 de 2011.4.0.0) aparece el siguiente error:
ld: pointer in read-only segment not allowed in slidable image, used in
___gmpn_modexact_1c_odd
Como alternativa, también probé la versión de 32 bits y, dependiendo de las banderas exactas que uso para vincular, obtengo errores como:
Library not loaded: /usr/local/lib/ghc-7.0.4/base-4.3.1.0/libHSbase-4.3.1.0-ghc7.0.4.dylib
Me las arreglé para ir un poco más allá agregando -lHSrts a la línea del enlazador. Esto me llevó al punto de vincular y cargar la biblioteca con éxito, pero luego no puedo encontrar el nombre de la función usando dlsym (o manualmente usando nm | grep)
Cualquier sugerencia sería muy apreciada, un archivo de creación de ejemplo o una línea de construcción que haya construido (y utilizado) con éxito una biblioteca compartida en OS X sería de agradecer. Soy bastante nuevo para Haskell y no sé si debería seguir golpeándome la cabeza asumiendo que el problema está de mi parte, o por varias razones no debería esperar que esto funcione en OS X.
Un repositorio git con todas las combinaciones que he probado está disponible aquí: https://github.com/bennoleslie/haskell-shared-example Logré conseguir algo que funcione para ghc de 32 bits, pero no de 64 bits todavía.
Es posible que desee probar el puerto ghc en Homebrew - https://github.com/mxcl/homebrew/blob/master/Library/Formula/ghc.rb