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), вам нужно указать прагмы в том порядке, в котором вы их передаете вручную.