GNU/Linux >> Belajar Linux >  >> Linux

relokasi R_X86_64_32S terhadap kesalahan penautan

Dengan asumsi Anda membuat pustaka bersama, kemungkinan besar yang terjadi adalah varian dari liblog4cplus.a yang Anda gunakan tidak dikompilasi dengan -fPIC . Di linux, Anda dapat mengonfirmasi ini dengan mengekstrak file objek dari pustaka statis dan memeriksa relokasinya:

ar -x liblog4cplus.a  
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'

Jika keluarannya kosong, pustaka statis tidak bergantung pada posisi dan tidak dapat digunakan untuk membuat objek bersama.

Karena pustaka statis berisi kode objek yang sudah dikompilasi, memberikan flag -fPIC tidak akan membantu.

Anda perlu mengetahui versi liblog4cplus.a dikompilasi dengan -fPIC dan gunakan yang itu sebagai gantinya.


Tambahkan -fPIC di akhir CMAKE_CXX_FLAGS dan CMAKE_C_FLAG

Contoh:

set( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall --std=c++11 -O3 -fPIC" )
set( CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -Wall -O3 -fPIC" )

Ini menyelesaikan masalah saya.


Linux
  1. Penanganan kesalahan dalam skrip Bash

  2. Debian – Kesalahan Relokasi Menggunakan Sudo Apt?

  3. Wifi Error Wpa_supplicant?

  1. Menautkan perpustakaan 32-bit ke program 64-bit

  2. Menautkan ke libc versi lama untuk menyediakan cakupan aplikasi yang lebih luas

  3. Apa arti dari Peringatan:Menautkan pustaka bersama dengan pustaka statis tidak portabel?

  1. Menautkan ke versi simbol lama dalam file .so

  2. Apa :-!! dalam kode C?

  3. kesalahan konfigurasi:Tidak dapat menautkan ke boost_system