내 질문은 공유 라이브러리 (이 라이브러리를 'S'라고 부르 자)에서 생성 된 정적 변수 (정적 void *)에 관한 것이지만 외부에 표시되지 않는 내부 변수이지만 API의 모든 호출은 그것에 달려있다. . 이제 프로그램이 다른 두 개의 공유 라이브러리에 링크되어 있고 그것들 모두가 라이브러리 S와 링크되어있는 경우에 대해 생각해 봅시다. 이제 주 프로그램의 정적 변수는 어떻게됩니까? 하나의 인스턴스가 있습니까? 두?공유 라이브러리 내의 정적 변수
3
A
답변
3
0
컴파일러는 동일 변수가 여러 개있는 경우 전역 고정 변수에 대해 다른 인스턴스를 만듭니다.
실제로 컴파일러 (또는 전 처리기)는 선언 한 소스 파일의 이름에 따라 모든 변수의 이름을 암시 적으로 변경합니다.
헤더 파일에 전역 정적 변수를 선언 한 다음이 헤더 파일을 여러 원본 파일에 포함 시켜서이 사실을 증명할 수 있습니다. 각 소스 파일에서 다른 값으로 설정하려고하면이 변수가 각 소스 파일에서 다른 값을 유지한다는 것을 알 수 있습니다.
6
스 마의 대답은 정확합니다. 정적 변수의 인스턴스는 하나만 존재합니다. 이것은 또한 공유 라이브러리에 정적 전역을 갖는 것이 큰 문제가 될 수있는 이유이기도합니다. 하나 실제 예제이 일어날 수있는 곳 :
-
다음과 같은 모듈로드
- 아파치 웹 서버 :
- libxml2를에 연결되어
- 방법 mod_php을
- mod_perl로드일부 PHP 코드가 libxml2를에 파서 옵션과 같은 글로벌 설정을 수정하는 경우
- libxml2를
- libxml2를에 연결되어
지금, 펄 코드는 이러한 변경 사항을 볼 수 있습니다. 이로 인해 진단하기가 매우 어려운 버그가 발생할 수 있습니다. 따라서 공유 라이브러리의 전역 상태를 피해야합니다.
(libxml2를하면 요즘 로컬에서 대부분의 설정을 할 수 있습니다.)이
+0
도와 주셔서 감사합니다. – zoska
관련 문제
- 1. 동적 라이브러리 내의 공유 라이브러리 정적 초기화 자
- 2. 공유 라이브러리 로딩시 정적 변수 손상
- 3. C++ 정적 및 공유 라이브러리
- 4. 정적 메서드 내에서 변수 공유
- 5. C++, 전역 변수 및 동적 공유 라이브러리
- 6. 공유 라이브러리 대 정적 라이브러리 로딩 시간
- 7. 라이브러리 함수의 선택적 정적 연결 공유 라이브러리
- 8. iphone objective c 정적 라이브러리 내의 정적 라이브러리
- 9. 부스트 - "정적"대 "공유"라이브러리
- 10. Actionscript3 함수 내의 정적 변수
- 11. 두 스레드 공유 정적 변수
- 12. iOS 정적 라이브러리 정적 라이브러리 참조
- 13. 공유 라이브러리 내의 백 트레이스 기능
- 14. C++ 정적 라이브러리의 공유 전역 변수 : Linux
- 15. 미디어 플레이어의 정적 라이브러리와 공유 라이브러리
- 16. 정적 및 공유 라이브러리 링커 오류
- 17. 정적 라이브러리와 연결된 공유 라이브러리 : 재배치 오류
- 18. 정적 또는 공유 라이브러리 만 사용하려면 어떻게해야합니까?
- 19. CMake : 공유 라이브러리에 정적 라이브러리 추가
- 20. 정적 및 공유 C++ 라이브러리 모두 만들기
- 21. 공유 정적 라이브러리 란 무엇입니까? 이 로드맵의에서
- 22. 정적 라이브러리, 공유 라이브러리에 대한 링크
- 23. CMake : 정적 라이브러리를 사용하는 공유 라이브러리
- 24. 공유 종속성이있는 여러 개의 정적 라이브러리 - iOS
- 25. Android NDK : 공유 라이브러리와 정적 라이브러리 연결
- 26. Qt 5 : 공유 및 정적 라이브러리
- 27. 공유 객체 (.so) 정적 공유 및 다른 공유 객체 열기, 정적 라이브러리 코드가 공유됩니까?
- 28. SCons가 정적 라이브러리 (.a)와 공유 라이브러리 (.so)를 만듭니다.
- 29. 실행 파일, 정적 라이브러리 및 공유 라이브러리 간의 관계
- 30. PHP 동적 메서드 내의 정적 변수
을 '하나 개의 인스턴스가 될 것이다 정적 한 – tarzanbappa
관련으로 선언 이후 : http://stackoverflow.com/questions/3186926/shared-global-variable-in-c-static-library? rq = 1 – Suma
@Suma 언급 한 질문에 대한 대답이 어떻게 도움이됩니까? – zoska