해결책:
이 문제를 해결하려면, 다음 명령을 사용하십시오.
g++ -o one one.cpp -Wall -std=c++11 -O3 -static -lrt -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
문제 이해:
pthread에 정적으로 링크하려면 약한 기호를 사용하므로 특정 접근 방식이 필요합니다.
ELF 파일(Unix에서 사용됨)은 강한 기호와 약한 기호를 구별합니다.
GLIBC 및 pthread 스레드 안전성 기능에는 약한 기호를 사용합니다. 약한 기호 버전은 정적 라이브러리에 정의되고 강력한 기호 버전은 동적 라이브러리에 정의됩니다. 동적 연결 시에는 Strong 심볼을 사용하지만, 정적 연결 시에는 Weak 심볼을 Strong 버전으로 교체해야 합니다.
정적으로 링크할 때 링커는 아카이브의 첫 번째 기호를 보고 검색을 중지합니다. -Wl,--whole-archive 플래그는 링커가 약한 기호를 포함하여 아카이브의 모든 기호를 보도록 강제합니다. -Wl,--no-whole-archive 플래그는 후속 아카이브에 대해 이 옵션을 끕니다.
이러한 플래그를 사용하면 pthread 함수의 강력한 기호 버전이 실행 파일에 포함되어 문제를 해결하도록 할 수 있습니다. 약한 기호로 인해 발생하는 분할 오류 문제입니다.
위 내용은 pthread를 g와 정적으로 연결하면 분할 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!