DMD2 (язык D), как связаться с библиотекой a c (libdl.so.2)

Я использую Eclipse с плагином DDT и DMD 2.06 в качестве компилятора. Когда я пытаюсь использовать такие функции, как dlopen, dlsym usw, я получаю ошибки "неразрешенной ссылки", в C и GCC я исправляю их, связывая с -ldl, -lsdl usw... но компилятор DMD2 не имеет таких параметров, Есть ли другой способ связи с конкретными библиотеками?

Кстати, я определяю функции C следующим образом

    extern(C)
    {
        /* From <dlfcn.h>
        *  See http://www.opengroup.org/onlinepubs/007908799/xsh/dlsym.html
        */

        const int RTLD_NOW = 2;

        void *dlopen(const(char)* file, int mode);
        int dlclose(void* handle);
        void *dlsym(void* handle, const(char*) name);
        const(char)* dlerror();
    }

был бы рад любой помощи.

2 ответа

Решение

Просто пройдите -L-ldl,

Кроме того, вам не нужно переопределять все это. Они доступны в core.sys.posix.dlfcn модуль.

У D есть ссылка на прагмы:

pragma(lib, "dl");

что заставит DMD выдавать "-L-ldl" (или системный флаг ссылки) компоновщику. Если компоновщик чувствителен к порядку (как ld), вам нужно указать прагмы в том порядке, в котором вы их передаете вручную.

Другие вопросы по тегам