Saya bekerja di Linux dengan C ++ (Eclipse), dan ingin menggunakan perpustakaan. Eclipse menunjukkan saya kesalahan:
undefined reference to 'dlopen'
Apakah Anda tahu solusinya?
Ini kode saya:
#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 benar, tetapi jika Anda menggunakan C (dan
gcc
kompiler) memperhitungkan bahwa ini tidak berfungsi:Tetapi ini:
Butuh saya sedikit untuk mencari tahu ...
sumber
Topiknya cukup lama, namun saya kesulitan dengan masalah yang sama hari ini saat mengkompilasi cegui 0.7.1 (prasyarat openVibe).
Apa yang berhasil bagi saya adalah mengatur:
LDFLAGS="-Wl,--no-as-needed"
di Makefile.Saya juga mencoba
-ldl
untukLDFLAGS
tetapi tidak berhasil.sumber
Saya berjuang dengan itu ketika menulis sintaks heredoc dan menemukan beberapa fakta menarik . Dengan
CC=Clang
, ini berfungsi:dan juga 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).sumber
Anda dapat mencoba menambahkan ini
ke opsi konfigurasi
sumber
Saya menggunakan CMake untuk mengkompilasi proyek saya dan saya menemukan masalah yang sama.
Solusi yang dijelaskan di sini berfungsi seperti mantra, cukup tambahkan $ {CMAKE_DL_LIBS} ke panggilan target_link_libraries ()
sumber
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
. Dengan / usr / bin / c ++ di Ubuntu saya itu tidak berfungsi ... (lihat juga jawaban gagak vulcan)Anda perlu melakukan sesuatu seperti ini untuk makefile:
Itu akan melewati flag linker dari make through ke linker. Tidak masalah bahwa makefile dibuat secara otomatis.
sumber
Saya bertemu masalah yang sama bahkan menggunakan
-ldl
.Selain opsi ini, file sumber perlu ditempatkan sebelum pustaka, lihat referensi yang tidak ditentukan untuk `dlopen ' .
sumber
Untuk menggunakan fungsi dl, Anda perlu menggunakan flag -ldl untuk linker.
bagaimana Anda melakukannya di gerhana?
sumber
Deskripsi yang baik tentang mengapa penempatan -l dl penting
Tapi ada juga penjelasan yang cukup ringkas di dokumen Dari $ man gcc
sumber