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
unzip log4cplus-1.1.0.zip
./configure --enable-statis=ya --enable-benang=yes
vi Makefile
dan menambahkan -fPIC untuk CXXFLAGS dan CFLAGSmembuat
g++ -frtti -w -c -fPIC -aku"Include_Directory" myfile.cpp
g++ -bersama -fPIC -frtti -aku"Include_Directory" -o mysofile.jadi myfile.o -Wl, - seluruh-arsip "../../../perpustakaan/log4cplus/liblog4cplus." -Wl, - tidak-seluruh-arsip -ldl
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.
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." :
Aku memecahkan masalah dengan menghapus file pertama.
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