IT

공유 라이브러리를 구축 할 때 -fPIC는 무엇을 의미합니까?

lottoking 2020. 8. 15. 09:29
반응형

공유 라이브러리를 구축 할 때 -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

반응형