İş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
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/
Çalışan Android işletim sistemi üzerin...
Tabanlı uygulamalar Hızlı bir işletim ...
Program aracılığıyla Java işletim sist...
Hangi işletim sistemi üzerinde çalışıy...
Kütüphane yüklü değil: libmysqlclient....