GNU/Linux >> Tutoriels Linux >  >> Linux

Erreur Linux c++ :référence indéfinie à 'dlopen'

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).


Linux
  1. Erreur de compilation MPI :référence indéfinie à `sqrt' - Résolu

  2. cp :répertoire omis - erreur lors de la copie d'un répertoire sous Linux

  3. Bibliothèque partagée dynamique C++ sous Linux

  4. C++ obtient le nom de la distribution Linux\version

  5. Libusb référence indéfinie à

Dépannage de l'erreur "Certificat TLS inacceptable" sous Linux

La commande dpkg sous Linux - Une référence pour les débutants

Erreur Android Studio 13 =autorisation refusée sous Linux

Erreur sur Vagrant Up sous Linux

copy_to_user non défini dans le noyau Linux version 4.12.8

Erreur lors de l'initialisation de la carte SD sous Linux