классы на самом деле не являются предметом экспортируемых двоичных файлов. В принципе это просто причудливая структура. А структуры - это просто макет памяти с данными. Библиотеки в основном содержат только функции.
Так что вы на самом деле хотите сделать, это создать класс, содержащий объявления функций члена и добавления переменных-членов в нем, как это:
библиотека/somelib.d:
module somelib;
class Foo
{
private long member;
this(long n)
{
member = n * 2;
}
int func(int x)
{
return cast(int) (x + member);
}
}
обертка/somelib .d:
module somelib; // module names need to match!
class Foo
{
private long member;
this(long n);
int func(int x);
}
app.d:
module app;
import std.stdio;
import somelib;
void main()
{
Foo foo = new Foo(4);
writeln("foo: ", foo);
writeln("func: ", foo.func(5));
}
Compile библиотека с dmd -lib library/somelib.d -ofsomelib.a
(или .lib на окнах)
Compile исполняемым с dmd app.d -Iwrapper somelib.a -ofapp
(или .lib/.exe на окнах)
-Iwrapper
я вместо того, чтобы указать имя файла, так что имена модулей могут соответствовать путь к файлу/папке, потому что имя модуля wrapper/somelib.d должно соответствовать имени модуля библиотеки/somelib.d, потому что это то, как имена функций искажаются в D.