Lors de la compilation de code C avec g et l'indicateur -pthread pour activer le multithread, l'utilisation de -static pour établir une liaison statique avec la bibliothèque pthread peut conduire à une erreur de segmentation. Cela se produit parce que la bibliothèque pthread liée statiquement ne dispose pas des symboles faibles nécessaires, y compris pthread_mutex_lock(), qui sont définis dans la bibliothèque glibc.
Pour résoudre ce problème, assurez-vous que l'exécutable est lié dynamiquement à pthread en passant le -lpthread indicateur vers l'éditeur de liens. Cela forcera l'éditeur de liens à inclure les symboles faibles requis de la version de la bibliothèque partagée de pthread.
Alternativement, si une liaison statique est requise, utilisez la commande suivante pour compiler le programme :
g++ -o one one.cpp -Wall -std=c++11 -O3 -static -lrt -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
L'option -Wl,--whole-archive force l'éditeur de liens à inclure tous les fichiers objets de la bibliothèque pthread, garantissant que les symboles faibles requis sont inclus. L'option -Wl,--no-whole-archive désactive ce comportement pour les fichiers d'archive suivants.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!