d2:Вызов writefln в общих библиотеках D со стороны C

Я пытаюсь быстро начать работу с динамическими разделяемыми библиотеками в 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()по-прежнему не работает с ошибкой сегментации.

6
задан toriningen 18 March 2012 в 15:24
поделиться