SORU
24 Mart 2012, CUMARTESİ


İşletim sistemi oluşturma Haskell paylaşılan kitaplıkları X

Haskell kaynak kodu paylaşılan bir kütüphane oluşturmaya çalışıyorum.

Burada Yönerge aşağıdaki denedim: http://weblog.haskell.cz/pivnik/building-a-shared-library-in-haskell/ ama herhangi bir şans sahip değilim.

Ben 64-bit (2011.4.0.0 gelen dzd 7.0.4) Haskell ile derleme yaparken aşağıdaki hatayı alıyorum:

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

Alternatif olarak ben de 32-bit sürümünü denedim, ve bağlantı için kullanabileceğiniz tam bayraklar bağlı olarak hatalar böyle olsun:

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

Biraz daha-lHSrts linker satırı ekleyerek almayı başardım. Bu başarılı ve kütüphane bağlama yükleme noktası için bir tane, ama sonra işlevini dlsym (veya el nm | grep kullanarak) adını bulamadım

Herhangi bir ipucu büyük mutluluk duyacağız, bir örnek dosya yapmak, ya da başarılı bir şekilde inşa edilmiş (ve kullanılan) işletim sistemi üzerinde paylaşılan bir kütüphane bulunmaktadır bu hat X kurmak mutluluk duyacağız. Ben oldukça yeni Haskell ve bilmiyorum eğer devam etmem gerekiyor vurup kafamı varsayarak bu sorun benim sonunda, ya da çeşitli sebepleri yapmamam bekliyoruz bu iş OS X

Denedim kombinasyonları mevcuttur her ile bir git repo: https://github.com/bennoleslie/haskell-shared-example 32-bit dzd için çalıştırmayı başardım, ama 64-bit henüz yok.

CEVAP
3 Ocak 2013, PERŞEMBE


Olası 64-bit OS X, son Haskell Platform sürümü (2012.4 64 bit) üzerinde çalışmaya paylaşılan kitaplıkları oluşturmak için

Çağırma satırı benim için çalışıyor:

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

module_init.c gibi bir şey olmalıdır:

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

Bu git repo: https://github.com/bennoleslie/haskell-shared-example çalışan bir örnek içerir.

Bu orijinal kaynağına gider kredi: http://weblog.haskell.cz/pivnik/building-a-shared-library-in-haskell/

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • Dan Gately

    Dan Gately

    13 AĞUSTOS 2006
  • Karan Thakur

    Karan Thakur

    23 HAZİRAN 2010