Sie müssen gegen libdl verlinken, hinzufügen
-ldl
zu Ihren Linker-Optionen
Ich habe CMake verwendet, um mein Projekt zu kompilieren, und ich habe das gleiche Problem festgestellt.
Die hier beschriebene Lösung funktioniert wie ein Zauber, fügen Sie einfach ${CMAKE_DL_LIBS} zum target_link_libraries()-Aufruf hinzu
@Masci ist richtig, aber falls Sie C (und den gcc
Compiler) berücksichtigen, dass dies nicht funktioniert:
gcc -ldl dlopentest.c
Aber das tut:
gcc dlopentest.c -ldl
Es hat ein bisschen gedauert, bis ich es herausgefunden habe...
das geht nicht:
gcc -ldl dlopentest.c
Aber das tut:
gcc dlopentest.c -ldl
Das ist sicher ein lästiges "Feature"
Beim Schreiben der Heredoc-Syntax hatte ich damit zu kämpfen und fand einige interessante Fakten . Mit CC=Clang
, das funktioniert:
$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
sowie alle diese:
$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
Allerdings mit CC=gcc
, nur die letzte Variante funktioniert; -ldl
nach -
(das stdin-Argumentsymbol).