Eu trabalho no Linux com C ++ (Eclipse) e quero usar uma biblioteca. O Eclipse me mostra um erro:
undefined reference to 'dlopen'
Você conhece uma solução?
Aqui está o meu 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 está correto, mas caso você esteja usando C (e o
gcc
compilador) leve em consideração que isso não funciona:Mas isso faz:
Demorei um pouco para descobrir ...
fonte
O tópico é bastante antigo, mas lutei com o mesmo problema hoje ao compilar o cegui 0.7.1 (pré-requisito do openVibe).
O que funcionou para mim foi definir:
LDFLAGS="-Wl,--no-as-needed"
no Makefile.Eu também tentei
-ldl
paraLDFLAGS
, mas sem sucesso.fonte
Eu estava enfrentando dificuldades ao escrever a sintaxe heredoc e encontrei alguns fatos interessantes . Com
CC=Clang
, isso funciona:bem como todos estes:
$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
No entanto, com
CC=gcc
, apenas a última variante funciona;-ldl
after-
(o símbolo do argumento stdin).fonte
você pode tentar adicionar isso
para as opções de configuração
fonte
Eu estava usando o CMake para compilar meu projeto e encontrei o mesmo problema.
A solução descrita aqui funciona como um encanto, basta adicionar $ {CMAKE_DL_LIBS} à chamada target_link_libraries ()
fonte
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
. Com / usr / bin / c ++ no meu Ubuntu não estava funcionando ... (ver também resposta do Corvo Vulcan)Você precisava fazer algo assim para o makefile:
Isso passará os sinalizadores do vinculador do make até o vinculador. Não importa que o makefile tenha sido gerado automaticamente.
fonte
Eu encontrei o mesmo problema, mesmo usando
-ldl
.Além dessa opção, os arquivos de origem precisam ser colocados antes das bibliotecas; consulte a referência indefinida ao `dlopen ' .
fonte
Para usar as funções dl, você precisa usar o sinalizador -ldl para o vinculador.
como você faz isso no eclipse?
fonte
Uma boa descrição de por que o posicionamento de -l dl é importante
Mas também há uma explicação bastante sucinta nos documentos From $ man gcc
fonte