La solution :
Pour résoudre ce problème, utilisez la commande suivante :
g++ -o one one.cpp -Wall -std=c++11 -O3 -static -lrt -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
Comprendre le problème :
La liaison statique vers pthread nécessite une approche spécifique en raison de l'utilisation de symboles faibles.
Les fichiers ELF (utilisés sous Unix) font la différence entre les symboles forts et faibles :
GLIBC et pthread utilisez des symboles faibles pour les fonctionnalités de sécurité des threads. Les versions de symboles faibles sont définies dans les bibliothèques statiques, tandis que les versions de symboles forts sont définies dans les bibliothèques dynamiques. Lors d'une liaison dynamique, les symboles forts sont utilisés, mais lors d'une liaison statique, les symboles faibles doivent être remplacés par les versions fortes.
Lors d'une liaison statique, l'éditeur de liens examine le premier symbole d'une archive et arrête la recherche. L'indicateur -Wl,--whole-archive force l'éditeur de liens à examiner tous les symboles de l'archive, y compris les symboles faibles. L'indicateur -Wl,--no-whole-archive désactive cette option pour les archives suivantes.
En utilisant ces indicateurs, vous vous assurez que les versions de symboles forts des fonctions pthread sont incluses dans l'exécutable, résolvant ainsi le problème. problème d'erreur de segmentation causé par des symboles faibles.
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!