Menyusun semula dengan -fPIC untuk Keserasian Pustaka Dikongsi
Apabila menyusun atur cara menggunakan perpustakaan, adalah penting untuk memastikan keserasian antara jenis perpustakaan dan kompilasi bendera. Satu senario sedemikian berlaku apabila menggunakan mesin ARM Ubuntu untuk memasang semula ffmpeg. Menyusun atur cara yang menggunakan perpustakaan ffmpeg mungkin mengakibatkan ralat berikut:
/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libavcodec.a: could not read symbols: Bad value collect2: ld returned 1 exit status
Ralat ini menunjukkan ketidakpadanan antara jenis pustaka dan bendera kompilasi. Bendera -fPIC biasanya digunakan semasa menyusun kod yang akan disertakan dalam pustaka kongsi (.so). Walau bagaimanapun, secara lalai, ffmpeg sering dihimpun ke dalam pustaka statik (.a).
Untuk menyelesaikan isu ini, anda mesti menyusun semula ffmpeg dengan bendera -fPIC. Ini boleh dicapai dengan mengubah suai pilihan kompilasi semasa mengkonfigurasi ffmpeg. Untuk berbuat demikian, tambahkan "--enable-shared" pada pilihan ./configure. Sebagai alternatif, anda boleh melumpuhkan perpustakaan kongsi sama sekali dengan menambahkan "--disable-shared" sebaliknya.
Setelah perubahan ini dibuat, penyusunan semula ffmpeg akan menghasilkan perpustakaan kongsi (.so) dan bukannya perpustakaan statik (.a ). Apabila anda menyusun atur cara anda yang menggunakan pustaka ffmpeg, ia akan berjaya memaut dengan pustaka kongsi, menyelesaikan ralat penempatan semula.
Atas ialah kandungan terperinci Mengapa saya mendapat ralat penempatan semula semasa menyusun dengan ffmpeg dan bagaimana saya boleh membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!