Penyelesaian:
Untuk menyelesaikan isu ini, gunakan arahan berikut:
g++ -o one one.cpp -Wall -std=c++11 -O3 -static -lrt -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
Memahami Masalah:
Pautan statik ke pthread memerlukan pendekatan khusus kerana penggunaan simbol yang lemah.
Fail ELF (digunakan dalam Unix) membezakan antara simbol kuat dan lemah:
GLIBC dan pthread gunakan simbol yang lemah untuk ciri keselamatan benang. Versi simbol yang lemah ditakrifkan dalam perpustakaan statik, manakala versi simbol yang kuat ditakrifkan dalam perpustakaan dinamik. Apabila pemautan dinamik, simbol kuat digunakan, tetapi apabila pemautan statik, simbol lemah mesti digantikan dengan versi kuat.
Apabila memaut secara statik, pemaut melihat simbol pertama dalam arkib dan berhenti mencari. Bendera -Wl,--keseluruhan arkib memaksa pemaut melihat semua simbol dalam arkib, termasuk simbol yang lemah. Bendera -Wl,--no-whole-archive mematikan pilihan ini untuk arkib seterusnya.
Dengan menggunakan bendera ini, anda memastikan bahawa versi simbol kuat bagi fungsi pthread disertakan dalam boleh laku, menyelesaikan masalah isu kesalahan pembahagian yang disebabkan oleh simbol yang lemah.
Atas ialah kandungan terperinci Mengapakah pthread yang memautkan secara statik dengan g menyebabkan kesalahan pembahagian, dan bagaimanakah saya boleh membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!