공유 라이브러리를 구축할 때 -fPIC는 무엇을 의미하는가?
'알고 있다.'-fPIC
'옵션은 주소 해결과 개별 모듈 간의 독립성과 관련이 있지만, 그게 무슨 뜻인지는 잘 모르겠다.설명할래요?
PIC는 Position Independent Code를 의미한다.
인용하다man gcc
:
대상 시스템에 대해 지원되는 경우, 동적 연결에 적합하고 전역 오프셋 테이블 크기에 대한 제한을 방지하는 위치 독립 코드를 방출하십시오.이 옵션은 AArch64, m68k, PowerPC 및 SPARC에서 차이를 만든다.
언급된 아키텍처에서 공유 개체(*.so)를 구축할 때 이 기능을 사용하십시오.
그f
"코드 생성에 사용되는 인터페이스 규칙을 제어하는" 옵션에 대한 gcc 접두사
그PIC
"입장 독립 코드"를 의미하며, 그것은 전문화 되어 있다.fpic
M68K 및 SPARC용.
편집: 0x6adb015에서 참조한 문서의 11페이지와 코리안 코멘트를 읽은 후 다음과 같이 몇 가지 변경사항을 적용했다.
이 옵션은 공유 라이브러리에만 해당되며 OS에 글로벌 오프셋 테이블을 사용 중임을 알 수 있다. 이는 모든 주소 참조가 GOT에 상대적이며 코드를 여러 프로세스에 걸쳐 공유할 수 있음을 의미한다.
그렇지 않으면, 이 옵션이 없다면, 로더는 모든 오프셋 자체를 수정해야 할 것이다.
말할 필요도 없이, 우리는 거의 항상 -fpic/PIC를 사용한다.
man gcc
다음과 같이 말한다.
-fpic공유에서 사용하기에 적합한 PIC(위치 독립 코드) 생성대상 시스템에 대해 지원되는 경우 라이브러리.이러한 코드가 모든 항목에 액세스GOT(Global Offset Table)를 통한 상수 주소.다이나믹로더는 프로그램이 시작될 때 GOT 항목을 해결함(동적)로더는 GCC의 일부가 아니며 운영 체제의 일부임).만약연결된 실행 파일의 GOT 크기가 시스템별 크기를 초과함최대 크기, 링커에서 오류 메시지가 표시됨-fpic은 작동하지 않는다. 이 경우 -fPIC로 대신 컴파일한다. (이러한 최대값은 SPARC의 경우 8k, m68k 및 RS/6000의 경우 32k이다.386은 그런 한계가 없다.) 위치 독립 코드에는 특별한 지원이 필요하므로특정 기계에서만 작동한다.386의 경우 GCC가 PIC를 지원한다.시스템 V 그러나 태양 386i를 위한 것은 아니다.에 대해 생성된 코드:IBM RS/6000은 항상 포지션에 독립적이다. -fPIC대상 시스템에 대해 지원되는 경우 위치 독립 코드를 내보냄동적 연결 및 크기 제한에 적합전역 간격띄우기 표이 옵션은 m68k에서 차이를 만든다.SPARC도 있고. 위치 독립 코드에는 특별한 지원이 필요하므로특정 기계에서만 작동한다.
참조URL: https://stackoverflow.com/questions/966960/what-does-fpic-mean-when-building-a-shared-library
'IT이야기' 카테고리의 다른 글
Vue.js - [Vue warn]을(를) 어떻게 해결해야 하는가:렌더 오류: "TypeError: 정의되지 않은 속성 '포트'를 읽을 수 없음"? (0) | 2022.04.16 |
---|---|
Vue.js의 헤더 및 바닥글 구성 요소 (0) | 2022.04.16 |
django를 이용한 Vuejs 앱 개발 및 구축 (0) | 2022.04.16 |
부트스트랩 Vue 편집 가능 테이블 열 (0) | 2022.04.16 |
C: 구조 정의에서 구조체에 대한 포인터 (0) | 2022.04.16 |