Musíte odkazovat proti libdl, add
-ldl
k vašim možnostem linkeru
Ke kompilaci svého projektu jsem používal CMake a našel jsem stejný problém.
Zde popsané řešení funguje jako kouzlo, jednoduše přidejte ${CMAKE_DL_LIBS} do volání target_link_libraries()
@Masci je správně, ale v případě, že používáte C (a gcc
kompilátor) vezměte v úvahu, že to nefunguje:
gcc -ldl dlopentest.c
Ale tohle:
gcc dlopentest.c -ldl
Trochu mi trvalo, než jsem na to přišel...
toto nefunguje:
gcc -ldl dlopentest.c
Ale tohle:
gcc dlopentest.c -ldl
To je jistě jedna nepříjemná "funkce"
Při psaní syntaxe heredoc jsem s tím bojoval a našel jsem pár zajímavých faktů . S CC=Clang
, funguje to:
$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
stejně jako všechny tyto:
$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
Nicméně s CC=gcc
, funguje pouze poslední varianta; -ldl
po -
(symbol argumentu stdin).