GNU/Linux >> Belajar Linux >  >> Linux

Kesalahan c ++ Linux:referensi tidak terdefinisi ke 'dlopen'

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).


Linux
  1. C++ dapatkan nama distribusi linux\versi

  2. Libusb undefined referensi ke

  3. referensi tidak terdefinisi untuk kesalahan simbol '_ZN5boost6system15system_categoryEv'

  1. Kesalahan Kompilasi MPI:referensi tidak terdefinisi ke `sqrt' – Terpecahkan

  2. cp:menghilangkan direktori – kesalahan saat menyalin direktori di Linux

  3. C++ Dynamic Shared Library di Linux

  1. Kesalahan C++:referensi tidak terdefinisi ke 'clock_gettime' dan 'clock_settime'

  2. C++/Assembly IDE di Linux

  3. Mendeteksi Windows atau Linux di C, C++