공유 라이브러리를 구축 할 때 -fPIC는 무엇을 의미합니까?
' -fPIC'이 개별 모듈 옵션 간의 주소 및 독립성을 확인하는 것과 관련이 있다는 것을 알고 있지만 이것이 실제로 무엇을 의미하는지 잘 모르겠습니다. 설명 할 수 있습니까?
PIC는 Position Independent Code를 나타냅니다.
그리고 인용 man gcc:
머신에 적합한 경우 동적 연결에 적합하고 좌석 테이블의 크기에 대한 제한을 피하는 위치 독립적 인 코드 대상을 내 보냅니다. 이 옵션은 m68k, PowerPC 및 SPARC에서 차이를 만듭니다. 위치 독립 코드는 특별한 지원이 필요하며 특정 기계에서만 작동합니다.
언급 된 아키텍처에서 공유 객체 (* .so)를 빌드 할 때 사용하십시오.
는 f"코드 생성에 사용되는 인터페이스 규칙을 제어"라는 옵션에 대한 GCC의 접두사
PIC"위치 독립 코드" 의 약자이며 fpicm68K 및 SPARC 의 전문화입니다 .
편집 : 0x6adb015 에서 참조 하는 문서의 11 페이지 와 coryan 의 주석 을 읽은 후 몇 가지 변경 사항을 적용했습니다.
이 옵션은 공유 라이브러리에만 의미가 있고 OS에 Global Offset Table, GOT를 사용하고 있음을 알려줍니다. 이는 모든 주소 참조가 GOT에 최다 최후 코드가 여러 프로세스에서 공유 될 수 있음을 의미합니다.
정렬이 모든 옵션이 선택되어야합니다.
말할 필요도없이, 우리는 거의 항상 -fpic / PIC를 사용합니다.
man gcc 말한다 :
-fpic 공유 장소에서 사용되는 것이 생성 위치 독립적 코드 (PIC) 라이브러리 (대상 컴퓨터에 지원되는 경우) 이러한 코드는 글로벌 회의실 테이블 (GOT)을 자극 상수 주소. 역학 로더는 프로그램이 시작될 때 GOT 항목을 해석합니다 (동적 로더는 GCC의 일부가 아닙니다. 운영 유틸리티의 일부입니다). 만약 많은 실행 파일의 GOT 크기가 기계 별 크기를 초과합니다. 최대 크기, 링커에서 다음을위한 오류 메시지가 표시됩니다. -fpic은 작동하지 않습니다. 이 경우 대신 -fPIC를 사용하여 다시 구입하십시오. (최대 값은 SPARC에서 8k이고 m68k 및 RS / 6000에서 32k입니다. 386에는 제한이 없습니다.) 위치 독립 인 코드에는 특별한 지원이 필요합니다. 특정 컴퓨터에서만 작동합니다. 386의 경우 GCC는 다음을 위해 PIC를 지원합니다. System V이지만 Sun 386i 용은 아닙니다. 에 대해 생성 된 코드 IBM RS / 6000은 항상 위치 독립적입니다. -fPIC 대상 기계에 지원되는 경우 위치 독립 코드를 내 보냅니다. 동적 연결에 적합하고 크기 제한을 피합니다. 글로벌 영업 테이블. 이 옵션은 m68k에서 차이를 만듭니다. 그리고 SPARC. 위치 독립 인 코드에는 특별한 지원이 필요합니다. 특정 컴퓨터에서만 작동합니다.
참고 URL : https://stackoverflow.com/questions/966960/what-does-fpic-mean-when-building-a-shared-library
'IT' 카테고리의 다른 글
| has_many : through를 사용하는 Rails 중첩 양식, 조인 모델의 속성을 편집하는 방법은 무엇입니까? (0) | 2020.08.15 |
|---|---|
| Haskell의 Comonad typeclass는 무엇입니까? (0) | 2020.08.15 |
| ASP.NET에 대한 Comet 구현? (0) | 2020.08.15 |
| 시맨틱 차이 유틸리티 (0) | 2020.08.15 |
| JWT 토큰의 서버 측 처리를위한 모범 사례 (0) | 2020.08.15 |