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.cMais ceci ne :
gcc dlopentest.c -ldlC'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).