Реализация C API в D

Так есть много информации о вызове C API из D, но как насчет обратного? Что нужно сделать, чтобы написать библиотеку в D, которая работает как обычная общая библиотека C? Вот простой случай:

main.c

extern int foo(int x);
void main() {
    printf("foo(5)=%d\n",foo(5));
}

foo.d

extern(C)
{
    int foo(int x)
    {
         return x*x;
    }
}

Наивные попытки построить и связать их с gcc и dmd просто приводят к ошибкам линкера.

Связь с gcc main.o foo.o:

doFoo.o: In function `no symbol':
doFoo.d:(.text+0x7): undefined reference to `_Dmodule_ref'
collect2: ld returned 1 exit status

Связь с dmd main.o foo.o:

/usr/lib64/libphobos2.a(deh2_2eb_525.o): In function `_D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable':
src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0xa): undefined reference to `_deh_beg'
src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0x14): undefined reference to `_deh_beg'
src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0x1e): undefined reference to `_deh_end'
src/rt/deh2.d:(.text._D2rt4deh213__eh_finddataFPvZPS2rt4deh213DHandlerTable+0x46): undefined reference to `_deh_end'
/usr/lib64/libphobos2.a(lifetime.o): In function `_D2rt8lifetime18_sharedStaticCtor9FZv':
src/rt/lifetime.d:(.text._D2rt8lifetime18_sharedStaticCtor9FZv+0x15): undefined reference to `_tlsend'
src/rt/lifetime.d:(.text._D2rt8lifetime18_sharedStaticCtor9FZv+0x29): undefined reference to `_tlsstart'
/usr/lib64/libphobos2.a(thread_a3_258.o): In function `_D4core6thread6Thread6__ctorMFPFZvmZC4core6thread6Thread':
src/core/thread.d:(.text._D4core6thread6Thread6__ctorMFPFZvmZC4core6thread6Thread+0x2b): undefined reference to `_tlsend'
src/core/thread.d:(.text._D4core6thread6Thread6__ctorMFPFZvmZC4core6thread6Thread+0x36): undefined reference to `_tlsstart'
/usr/lib64/libphobos2.a(thread_a3_258.o): In function `_D4core6thread6Thread6__ctorMFDFZvmZC4core6thread6Thread':
src/core/thread.d:(.text._D4core6thread6Thread6__ctorMFDFZvmZC4core6thread6Thread+0x28): undefined reference to `_tlsend'
src/core/thread.d:(.text._D4core6thread6Thread6__ctorMFDFZvmZC4core6thread6Thread+0x33): undefined reference to `_tlsstart'
/usr/lib64/libphobos2.a(thread_a3_258.o): In function `_D4core6thread6Thread6__ctorMFZC4core6thread6Thread':
src/core/thread.d:(.text._D4core6thread6Thread6__ctorMFZC4core6thread6Thread+0x26): undefined reference to `_tlsend'
src/core/thread.d:(.text._D4core6thread6Thread6__ctorMFZC4core6thread6Thread+0x31): undefined reference to `_tlsstart'
/usr/lib64/libphobos2.a(thread_a0_713.o): In function `thread_entryPoint':
src/core/thread.d:(.text.thread_entryPoint+0x36): undefined reference to `_tlsend'
src/core/thread.d:(.text.thread_entryPoint+0x41): undefined reference to `_tlsstart'
collect2: ld returned 1 exit status
--- errorlevel 1

-121-923083-

Как я могу объединить несколько вариантов регистрации facebook twitter openid Я хочу построить систему входа с javascript и PHP, которая позволит пользователям использовать существующие аккаунты для Они должны иметь возможность использовать хотя бы эти аккаунты... Facebook Twitter...

Я хочу построить систему входа с javascript и PHP, которая позволит пользователям использовать существующие учетные записи для входа на мой сайт.

Они должны иметь возможность использовать хотя бы эти счета...

  • Facebook
  • Twitter
  • Google
  • Yahoo
  • OpenID

плюс возможность создания учетной записи на моем сайте, если у них нет входа выше.

Я видел все эти услуги ниже, которые предлагают то, что я хочу сделать,

Я хотел бы построить это сам или использовать какой-нибудь проект с открытым исходным кодом. Другими словами, я не хочу, чтобы третья сторона занималась этим, как сайты выше.

Так кто-нибудь знает, существует ли проект с открытым исходным кодом, который может справиться с этим, или указывает мне на то, как я должен это создать? (Я могу делать PHP и javascript, поэтому спрашиваю больше о теории дизайна/потоке проекта, больше, чем как его кодировать)

Я знаю, что могут быть подобные вопросы, но я не нашел то, что я ищу.

9
задан Deepak 2 January 2015 в 09:03
поделиться