"relokasi R_X86_64_32S terhadap " menghubungkan Kesalahan

I'm Mencoba untuk Link statis Perpustakaan ke perpustakaan bersama , aku'm Mendapatkan error Berikut

/usr/bin/ld: ../../../perpustakaan/log4cplus/liblog4cplus.a(fileappender.o): relokasi R_X86_64_32S terhadap `sebuah simbol lokal' tidak dapat digunakan ketika membuat sebuah objek bersama; mengkompilasi ulang dengan -fPIC
../../../perpustakaan/log4cplus/liblog4cplus.a: tidak bisa membaca simbol-simbol: nilai Buruk
collect2: ld kembali 1 status keluar

Tapi ini bekerja pada 32 bit mesin tanpa kesalahan tersebut. Saya mencoba menambahkan -fPIC bendera manual untuk Makefile yang terlalu didn't memecahkan masalah

Aku mencoba -seluruh-arsip bendera seperti yang disarankan here tetapi tidak berhasil.

 
/usr/bin/ld: ../../../perpustakaan/log4cplus/liblog4cplus.a(appenderattachableimpl.o): relokasi R_X86_64_32S terhadap `vtable untuk log4cplus::spi::AppenderAttachable' tidak dapat digunakan ketika membuat sebuah objek bersama; mengkompilasi ulang dengan -fPIC
../../../perpustakaan/log4cplus/liblog4cplus.a(appenderattachableimpl.o): tidak bisa membaca simbol-simbol: nilai Buruk
collect2: ld kembali 1 status keluar

Penciptaan liblog4cplus.a:

  1. unzip log4cplus-1.1.0.zip
  2. ./configure --enable-statis=ya --enable-benang=yes
  3. vi Makefile dan menambahkan -fPIC untuk CXXFLAGS dan CFLAGS
  4. membuat

Kemudian untuk Menyusun ruang perpustakaan:

  1. g++ -frtti -w -c -fPIC -aku"Include_Directory" myfile.cpp
  2. g++ -bersama -fPIC -frtti -aku"Include_Directory" -o mysofile.jadi myfile.o -Wl, - seluruh-arsip "../../../perpustakaan/log4cplus/liblog4cplus." -Wl, - tidak-seluruh-arsip -ldl
Mengomentari pertanyaan (4)
Larutan

Dengan asumsi anda menghasilkan ruang perpustakaan, kemungkinan besar yang terjadi adalah varian dari liblog4cplus. anda tidak menggunakan't disusun dengan -fPIC. Di linux, anda dapat mengkonfirmasi hal ini dengan mengekstrak file objek dari perpustakaan statis dan memeriksa mereka relokasi:

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

Jika output adalah kosong, maka perpustakaan statis tidak-posisi independen dan tidak dapat digunakan untuk menghasilkan objek bersama.

Sejak statis perpustakaan berisi kode objek yang sudah disusun, menyediakan -fPIC bendera won't membantu.

Anda perlu untuk mendapatkan kuasai versi liblog4cplus.a yang disusun dengan -fPIC dan menggunakan salah satu yang sebaliknya.

Komentar (1)

I've punya kesalahan yang sama ketika menginstal FCL bahwa kebutuhan CCD lib(libccd) seperti ini:

/usr/bin/ld: /usr/local/lib/libccd.a(ccd.o): relokasi R_X86_64_32S terhadap `sebuah simbol lokal' tidak dapat digunakan ketika membuat sebuah objek bersama; mengkompilasi ulang dengan -fPIC

Saya menemukan bahwa ada dua file yang berbeda bernama "libccd." :

  1. /usr/local/lib/libccd.a
  2. /usr/local/lib/x86_64-linux-gnu/libccd.a

Aku memecahkan masalah dengan menghapus file pertama.

Komentar (0)

Relokasi R_X86_64_PC32 terhadap simbol tidak terdefinisi , biasanya terjadi ketika LDFLAGS ditetapkan dengan pengerasan dan CFLAGS tidak . Mungkin hanya kesalahan pengguna: Jika anda menggunakan -spesifikasi=/usr/lib/rpm/redhat/redhat-mengeras-ld pada saat link, anda juga perlu untuk menggunakan -spesifikasi=/usr/lib/rpm/redhat/redhat-mengeras-cc1 pada waktu kompilasi, dan seperti yang anda kompilasi dan linking pada saat yang sama, anda perlu baik baik, atau drop -spesifikasi=/usr/lib/rpm/redhat/redhat-mengeras-ld . Perbaikan umum : https://bugzilla.redhat.com/show_bug.cgi?id=1304277#c3 https://github.com/rpmfusion/lxdream/blob/master/lxdream-0.9.1-implicit.patch

Komentar (0)