Я работаю в Linux с C ++ (Eclipse) и хочу использовать библиотеку. Затмение показывает мне ошибку:
undefined reference to 'dlopen'
Вы знаете решение?
Вот мой код:
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
double (*desk)(char*);
char *error;
handle = dlopen ("/lib/CEDD_LIB.so.6", RTLD_LAZY);
if (!handle) {
fputs (dlerror(), stderr);
exit(1);
}
desk= dlsym(handle, "Apply");
if ((error = dlerror()) != NULL) {
fputs(error, stderr);
exit(1);
}
dlclose(handle);
}
locate libdl.so
@Masci корректен, но в случае, если вы используете C (и
gcc
компилятор), учтите, что это не работает:Но это делает:
Мне понадобилось немного, чтобы понять ...
источник
Тема довольно старая, но сегодня я боролся с той же проблемой при компиляции cegui 0.7.1 (обязательное условие openVibe).
То, что работало для меня, должно было установить:
LDFLAGS="-Wl,--no-as-needed"
в Makefile.Я также пытался
-ldl
для ,LDFLAGS
но безрезультатно.источник
Я боролся с этим, когда писал синтаксис heredoc, и нашел несколько интересных фактов . С
CC=Clang
этим работает:а также все это:
$CC -ldl -x c -o app.exe - << EOF
$CC -x c -ldl -o app.exe - << EOF
$CC -x c -o app.exe -ldl - << EOF
$CC -x c -o app.exe - -ldl << EOF
Однако, с
CC=gcc
, работает только последний вариант;-ldl
после-
(символ аргумента стандартного ввода).источник
Вы можете попробовать добавить это
к настройке параметров
источник
Я использовал CMake для компиляции своего проекта, и я нашел ту же проблему.
Описанное здесь решение работает как чудо, просто добавьте $ {CMAKE_DL_LIBS} к вызову target_link_libraries ()
источник
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
. С / usr / bin / c ++ на моем Ubuntu он не работал ... (см. Также ответВам нужно было сделать что-то подобное для make-файла:
Это передаст флаги компоновщика от make до компоновщика. Не имеет значения, что make-файл был сгенерирован автоматически.
источник
Я встретил ту же проблему, даже используя
-ldl
.Помимо этой опции, исходные файлы должны быть помещены перед библиотеками, см. Неопределенную ссылку на `dlopen ' .
источник
Чтобы использовать функции dl, необходимо использовать флаг -ldl для компоновщика.
как ты делаешь это в затмении?
источник
Хорошее описание того, почему размещение -l dl имеет значение
Но в документах From $ man gcc также есть довольно краткое объяснение.
источник