Trabajo en Linux con C ++ (Eclipse) y quiero usar una biblioteca. Eclipse me muestra un error:
undefined reference to 'dlopen'
¿Conoces una solución?
Aquí está mi código:
#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 es correcto, pero en caso de que esté utilizando C (y el
gcc
compilador) tenga en cuenta que esto no funciona:Pero esto hace:
Me tomó un poco descubrirlo ...
fuente
El tema es bastante antiguo, sin embargo, luché con el mismo problema hoy mientras compilaba cegui 0.7.1 (requisito previo de openVibe).
Lo que funcionó para mí fue establecer:
LDFLAGS="-Wl,--no-as-needed"
en el Makefile.También he intentado
-ldl
paraLDFLAGS
pero fue en vano.fuente
Estaba luchando con eso cuando escribía la sintaxis heredoc y encontré algunos datos interesantes . Con
CC=Clang
esto funciona: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-
(el símbolo de argumento stdin).fuente
puedes intentar agregar esto
a las opciones de configuración
fuente
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 ()
fuente
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
. Con / usr / bin / c ++ en mi Ubuntu no funcionaba ... (ver también la respuesta de vulcan raven)Necesitabas hacer algo así para el archivo MAKE:
Eso pasará las banderas del enlazador de make al enlazador. No importa que el archivo MAKE se haya generado automáticamente.
fuente
Me encontré con el mismo problema incluso usando
-ldl
.Además de esta opción, los archivos de origen deben colocarse antes de las bibliotecas, consulte la referencia indefinida a 'dlopen' .
fuente
Para usar las funciones dl, debe usar el indicador -ldl para el enlazador.
¿Cómo lo haces en eclipse?
fuente
Una buena descripción de por qué es importante la ubicación de -l dl
Pero también hay una explicación bastante sucinta en los documentos. Desde $ man gcc
fuente