Beim Kompilieren von C-Code mit g und dem Flag -pthread zur Aktivierung von Multithreading kann die Verwendung von -static zur statischen Verknüpfung mit der pthread-Bibliothek zu einem Segmentierungsfehler führen. Dies liegt daran, dass der statisch verknüpften pthread-Bibliothek die erforderlichen schwachen Symbole fehlen, einschließlich pthread_mutex_lock(), die in der glibc-Bibliothek definiert sind.
Um dieses Problem zu beheben, stellen Sie sicher, dass die ausführbare Datei dynamisch mit pthread verknüpft ist, indem Sie übergeben -lpthread Flag für den Linker. Dadurch wird der Linker gezwungen, die erforderlichen schwachen Symbole aus der gemeinsam genutzten Bibliotheksversion von pthread einzuschließen.
Wenn eine statische Verknüpfung erforderlich ist, verwenden Sie alternativ den folgenden Befehl, um das Programm zu kompilieren:
g++ -o one one.cpp -Wall -std=c++11 -O3 -static -lrt -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
Die Option -Wl,--whole-archive zwingt den Linker, alle Objektdateien aus der pthread-Bibliothek einzuschließen, um sicherzustellen, dass die erforderlichen schwachen Symbole enthalten sind. Die Option -Wl,--no-whole-archive deaktiviert dieses Verhalten für nachfolgende Archivdateien.
Das obige ist der detaillierte Inhalt vonHier sind einige fragenbasierte Titel, die zum Inhalt Ihres Artikels passen: * Warum führt die Verwendung von -static mit -pthread für die C-Kompilierung zu Segmentierungsfehlern? * So beheben Sie Segmentierungsfehler w. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!