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.
Bagaimana cara menambahkan perangkat lunak saya sendiri ke paket Buildroot Linux?
gcc - /usr/bin/ld error:tidak dapat menemukan <library> di /usr/local/lib meskipun ldconfig mencantumkannya, dan path ditambahkan ke ld.so.conf