Apabila menyusun kod C dengan g dan bendera -pthread untuk mendayakan multithreading, menggunakan -static untuk memautkan secara statik terhadap pustaka pthread boleh membawa kepada ralat Segmentasi. Ini berlaku kerana perpustakaan pthread yang dipautkan secara statik tidak mempunyai simbol lemah yang diperlukan, termasuk pthread_mutex_lock(), yang ditakrifkan dalam pustaka glibc.
Untuk menyelesaikan isu ini, pastikan yang boleh laku dipautkan secara dinamik terhadap pthread dengan menghantar -lpthread bendera ke penghubung. Ini akan memaksa pemaut untuk memasukkan simbol lemah yang diperlukan daripada versi perpustakaan kongsi pthread.
Sebagai alternatif, jika pemautan statik diperlukan, gunakan arahan berikut untuk menyusun atur cara:
g++ -o one one.cpp -Wall -std=c++11 -O3 -static -lrt -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
Pilihan -Wl,--whole-archive memaksa pemaut untuk memasukkan semua fail objek daripada perpustakaan pthread, memastikan bahawa simbol lemah yang diperlukan disertakan. Pilihan -Wl,--no-whole-archive mematikan tingkah laku ini untuk fail arkib seterusnya.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan kandungan artikel anda: * Mengapakah penggunaan -static dengan -pthread untuk kompilasi C menyebabkan Kesalahan Segmentasi? * Bagaimana untuk menyelesaikan Kesalahan Segmentasi w. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!