Anda harus menautkan ke libdl, tambahkan
-ldl
ke opsi penaut Anda
Saya menggunakan CMake untuk mengkompilasi proyek saya dan saya menemukan masalah yang sama.
Solusi yang dijelaskan di sini berfungsi seperti pesona, cukup tambahkan ${CMAKE_DL_LIBS} ke panggilan target_link_libraries()
@Masci benar, tetapi jika Anda menggunakan C (dan gcc compiler) memperhitungkan bahwa ini tidak berhasil:
gcc -ldl dlopentest.c
Tapi ini tidak:
gcc dlopentest.c -ldl
Butuh sedikit waktu untuk mencari tahu...
ini tidak berhasil:
gcc -ldl dlopentest.cTapi ini tidak:
gcc dlopentest.c -ldlItu pasti salah satu "fitur" yang mengganggu
Saya mengalami kesulitan saat menulis sintaks heredoc dan menemukan beberapa fakta menarik . Dengan CC=Clang , ini berfungsi:
$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
serta semua ini:
$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
Namun, dengan CC=gcc , hanya varian terakhir yang berfungsi; -ldl setelah - (simbol argumen stdin).