Vous devez lier contre libdl, ajouter
-ldl
à vos options de lien
J'utilisais CMake pour compiler mon projet et j'ai rencontré le même problème.
La solution décrite ici fonctionne comme un charme, ajoutez simplement ${CMAKE_DL_LIBS} à l'appel target_link_libraries()
@Masci est correct, mais si vous utilisez C (et le gcc
compilateur) tenez compte du fait que cela ne fonctionne pas :
gcc -ldl dlopentest.c
Mais ceci ne :
gcc dlopentest.c -ldl
J'ai mis un peu de temps à comprendre...
cela ne fonctionne pas :
gcc -ldl dlopentest.c
Mais ceci ne :
gcc dlopentest.c -ldl
C'est une "fonctionnalité" ennuyeuse à coup sûr
J'avais du mal avec ça lors de l'écriture de la syntaxe heredoc et j'ai trouvé quelques faits intéressants . Avec CC=Clang
, cela fonctionne :
$CC -ldl -x c -o app.exe - << EOF
#include <dlfcn.h>
#include <stdio.h>
int main(void)
{
if(dlopen("libc.so.6", RTLD_LAZY | RTLD_GLOBAL))
printf("libc.so.6 loading succeeded\n");
else
printf("libc.so.6 loading failed\n");
return 0;
}
EOF
./app.exe
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
après -
(le symbole d'argument stdin).