GNU/Linux >> Tutoriales Linux >  >> Linux

Error de Linux c ++:referencia indefinida a 'dlopen'

Tienes que vincular contra libdl, agregar

-ldl

a sus opciones de enlace


Estaba usando CMake para compilar mi proyecto y encontré el mismo problema.

La solución descrita aquí funciona de maravilla, simplemente agregue ${CMAKE_DL_LIBS} a la llamada target_link_libraries()


@Masci es correcto, pero en caso de que esté usando C (y el gcc compilador) tenga en cuenta que esto no funciona:

gcc -ldl dlopentest.c

Pero esto sí:

gcc dlopentest.c -ldl

Me tomó un poco averiguarlo...


esto no funciona:

gcc -ldl dlopentest.c

Pero esto sí:

gcc dlopentest.c -ldl

Seguro que esa es una "característica" molesta

Tuve problemas al escribir la sintaxis de heredoc y encontré algunos datos interesantes . Con CC=Clang , esto funciona:

$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

así como todos estos:

  • $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

Sin embargo, con CC=gcc , solo funciona la última variante; -ldl después de - (el símbolo del argumento stdin).


Linux
  1. cp:directorio omitido – error al copiar un directorio en Linux

  2. Biblioteca compartida dinámica de C++ en Linux

  3. Error de C++:referencia indefinida a 'clock_gettime' y 'clock_settime'

  4. C++/IDE de ensamblaje en Linux

  5. Detectar Windows o Linux en C, C++

Solución de problemas del error "Certificado TLS inaceptable" en Linux

El comando dpkg en Linux:una referencia para principiantes

C++ obtener nombre de distribución de Linux\versión

Libusb referencia indefinida a

crt1.o:En la función `_start':- referencia indefinida a `main' en Linux

Error al inicializar la tarjeta SD en Linux