Я пытаюсь быстро начать работу с динамическими разделяемыми библиотеками в D, но у меня возникла проблема.
Я создаю следующий код с помощьюdmd -shared./testlib.d
:
module testlib;
import std.c.stdio;
extern (C) export int hello(int a) {
printf("Number is %d", a);
return (a + 1);
}
Он отлично строится и работает. Но когда я пытаюсь использовать более D'ish источник :
module testlib;
import std.stdio;
extern (C) export int hello(int a) {
writefln("Number is %d", a);
return (a + 1);
}
, он терпит неудачу с ошибкой сегментации, как только я пытаюсь вызвать hello
. Что я делаю неправильно?
Я звоню hello
с помощью Python:
import ctypes
testlib = ctypes.CDLL('testlib.dylib');
print (testlib.hello(10))
UPD1:Похоже, что я также не могу использовать функции Phobos, такие как std.conv.to!(string)
.
UPD2:На винде такой проблемы нет, вроде все нормально работает. Mac OS X страдает от этого.
UPD3:Возможно, это связано с GC. Я должен каким-то образом инициализировать GC, но core.memory.GC.enable()по-прежнему не работает с ошибкой сегментации.