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.c
Tapi ini tidak:
gcc dlopentest.c -ldl
Itu 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).