Rumah >pembangunan bahagian belakang >C++ >Mengapa saya mendapat ralat 'relokasi R_ARM_MOVW_ABS_NC terhadap `simbol tempatan' tidak boleh digunakan semasa membuat objek kongsi'?

Mengapa saya mendapat ralat 'relokasi R_ARM_MOVW_ABS_NC terhadap `simbol tempatan' tidak boleh digunakan semasa membuat objek kongsi'?

Barbara Streisand
Barbara Streisandasal
2024-11-08 07:00:02797semak imbas

Why do I get the error

Penyusunan semula dengan -fPIC Flag untuk Mesin ARM Ubuntu

Apabila membina semula FFmpeg pada mesin ARM Ubuntu, seseorang mungkin menghadapi ralat:

relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

Ralat ini menunjukkan bahawa sistem sedang cuba memautkan perpustakaan statik dengan dinamik perpustakaan, yang tidak serasi. Untuk menyelesaikan masalah ini, adalah perlu untuk menyusun semula perpustakaan yang bermasalah, seperti FFmpeg, dengan bendera -fPIC.

Proses Penyusunan Semula

Langkah-langkah berikut boleh diambil untuk susun semula perpustakaan dengan bendera -fPIC:

  1. Edit Sumber Perpustakaan Kod: Cari dan buka fail kod sumber untuk pustaka yang menyebabkan ralat penempatan semula.
  2. Tambah Bendera -fPIC: Tambahkan bendera -fPIC pada pilihan pengkompil yang ditentukan dalam kod sumber. Bendera ini mengarahkan pengkompil untuk menjana kod bebas kedudukan (PIC), yang sesuai untuk pemautan dinamik.
  3. Kompil semula Perpustakaan: Bina semula pustaka menggunakan pilihan pengkompil yang dikemas kini. Ini biasanya boleh dilakukan menggunakan arahan make.
  4. Pasang Pustaka yang Disusun Semula: Setelah pustaka telah disusun semula dengan PIC, ia harus dipasang ke dalam direktori perpustakaan sistem. Ini akan menjadikannya tersedia untuk dipautkan dengan program lain.

Contoh Khusus untuk FFmpeg

Untuk FFmpeg, arahan berikut boleh digunakan untuk menyusun semula dengan -fPIC flag:

./configure --enable-shared --disable-static
make

Dengan menambahkan --enable-shared flag, dikongsi perpustakaan akan dijana dan bukannya perpustakaan statik. Bendera --disable-static memastikan tiada perpustakaan statik dibina.

Selepas membina semula FFmpeg dengan pilihan ini, perpustakaan yang disusun semula boleh dipasang ke dalam direktori sistem yang sesuai menggunakan make install. Ini akan menjadikan perpustakaan FFmpeg yang didayakan PIC tersedia untuk dipautkan dan digunakan oleh program lain.

Atas ialah kandungan terperinci Mengapa saya mendapat ralat 'relokasi R_ARM_MOVW_ABS_NC terhadap `simbol tempatan' tidak boleh digunakan semasa membuat objek kongsi'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn