Ich arbeite unter Linux mit C ++ (Eclipse) und möchte eine Bibliothek verwenden. Eclipse zeigt mir einen Fehler:
undefined reference to 'dlopen'
Kennen Sie eine Lösung?
Hier ist mein Code:
#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 ist korrekt, aber falls Sie C (und den
gcc
Compiler) verwenden, berücksichtigen Sie, dass dies nicht funktioniert:Aber das tut:
Ich habe ein bisschen gebraucht, um herauszufinden ...
quelle
Das Thema ist ziemlich alt, aber ich hatte heute beim Kompilieren von cegui 0.7.1 (openVibe-Voraussetzung) mit demselben Problem zu kämpfen.
Was für mich funktioniert hat war zu setzen:
LDFLAGS="-Wl,--no-as-needed"
im Makefile.Ich habe auch versucht ,
-ldl
für ,LDFLAGS
aber ohne Erfolg.quelle
Ich hatte Probleme damit, Heredoc-Syntax zu schreiben, und fand einige interessante Fakten . Mit
CC=Clang
funktioniert das:sowie alle diese:
$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
Mit
CC=gcc
funktioniert jedoch nur die letzte Variante;-ldl
after-
(das stdin-Argument-Symbol).quelle
Sie können versuchen, dies hinzuzufügen
zu den Konfigurationsoptionen
quelle
Ich habe CMake zum Kompilieren meines Projekts verwendet und das gleiche Problem festgestellt.
Die hier beschriebene Lösung funktioniert wie ein Zauber. Fügen Sie einfach $ {CMAKE_DL_LIBS} zum Aufruf von target_link_libraries () hinzu
quelle
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
. Mit / usr / bin / c ++ auf meinem Ubuntu funktionierte es nicht ... (siehe auch die Antwort des vulkanischen Raben)Sie mussten so etwas für das Makefile tun:
Dadurch werden die Linker-Flags von make bis zum Linker weitergeleitet. Es spielt keine Rolle, dass das Makefile automatisch generiert wurde.
quelle
Ich habe das gleiche Problem sogar mit
-ldl
.Neben dieser Option müssen Quelldateien vor Bibliotheken platziert werden, siehe undefinierter Verweis auf "dlopen" .
quelle
Um dl-Funktionen verwenden zu können, müssen Sie das Flag -ldl für den Linker verwenden.
Wie machst du das in Eclipse?
quelle
Eine gute Beschreibung, warum die Platzierung von -l dl wichtig ist
Aber es gibt auch eine ziemlich prägnante Erklärung in den Dokumenten von $ man gcc
quelle