Je travaille sous Linux avec C ++ (Eclipse), et je souhaite utiliser une bibliothèque. Eclipse me montre une erreur:
undefined reference to 'dlopen'
Connaissez-vous une solution?
Voici mon 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 est correct, mais si vous utilisez C (et le
gcc
compilateur), tenez compte du fait que cela ne fonctionne pas:Mais cela fait:
Il m'a fallu un peu de temps pour comprendre ...
la source
Le sujet est assez ancien, mais je me suis battu avec le même problème aujourd'hui lors de la compilation de cegui 0.7.1 (prérequis openVibe).
Ce qui a fonctionné pour moi était de mettre:
LDFLAGS="-Wl,--no-as-needed"
dans le Makefile.J'ai aussi essayé
-ldl
deLDFLAGS
mais en vain.la source
J'avais du mal avec cela lors de l'écriture de la syntaxe heredoc et j'ai trouvé des faits intéressants . Avec
CC=Clang
, cela fonctionne:ainsi que tous ceux-ci:
$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
Cependant, avec
CC=gcc
, seule la dernière variante fonctionne;-ldl
after-
(le symbole d'argument stdin).la source
vous pouvez essayer d'ajouter ceci
vers les options de configuration
la source
J'utilisais CMake pour compiler mon projet et j'ai trouvé le même problème.
La solution décrite ici fonctionne comme un charme, ajoutez simplement $ {CMAKE_DL_LIBS} à l'appel target_link_libraries ()
la source
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
. Avec / usr / bin / c ++ sur mon Ubuntu ça ne fonctionnait pas ... (voir aussi la réponse deVous deviez faire quelque chose comme ça pour le makefile:
Cela transmettra les indicateurs de l'éditeur de liens de make à l'éditeur de liens. Peu importe que le makefile ait été généré automatiquement.
la source
J'ai rencontré le même problème même en utilisant
-ldl
.Outre cette option, les fichiers sources doivent être placés avant les bibliothèques, voir la référence non définie à `dlopen ' .
la source
Pour utiliser les fonctions dl, vous devez utiliser l'indicateur -ldl pour l'éditeur de liens.
comment faites-vous en éclipse?
la source
Une bonne description de l'importance du placement de -l dl
Mais il y a aussi une explication assez succincte dans la documentation From $ man gcc
la source