dlopen() 내에서 초기화 된 라이브러리가 주 프로그램이 소유 한 정적 변수를 초기화하는 이유를 아는 사람이 있습니까? 주 프로그램과 공유 라이브러리는 모두 정적 변수의 복사본을 가지고 있지만, 어떤 이유로 공유 라이브러리는 주 프로그램의 정적 변수 복사본을 다시 초기화하고이를 파괴하여 주 프로그램이이를 파괴하려고 시도 할 때 세그 폴트를 발생시킵니다.주 프로그램 및 공유 라이브러리는 __static_initialization_and_destruction_0에서 동일한 정적 변수를 초기화합니다.
기호 테이블에서 잘못된 이름을 잘못 범하는 경우입니까?
님, 버전 스크립트를 구현하고 링커에 전달하는 데 문제가있는 것 같습니다. 구문 오류에 대해 불평하고 있습니다. 다음은 내가 사용한 스크립트 파일입니다. "{global : local : *;}"어떤 아이디어입니까? 예제를 찾았지만 모두 구문 검사에 실패한 것 같습니다. 또는 __asm__ 지시문을 소스에 직접 저장하는 것이 더 좋습니까? – Paul
@ Paul - 내 스크립트는 'VERSION {{global : ...; 지역 *; }; }'링커 명령 행에서 그 파일의 파일 이름을 사용합니다. –
@ Samuel - 감사합니다. 버전 스크립트를 완성하고 글로벌 컨텍스트에 몇 가지 심볼을 추가 한 후 이제는 작동합니다! – Paul