[gcc] `-fpic`과`-fPIC` gcc 매개 변수의 차이점은 무엇입니까?

난 이미 읽은 gcc맨 페이지를,하지만, 난 여전히 사이의 차이를 이해할 수 없다 -fpic-fPIC. 누군가 매우 간단하고 명확하게 설명 할 수 있습니까?


관련 질문 :



답변

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

사용 -fPIC또는 -fpic위치 독립적 인 코드를 생성 할 수 있습니다. 위치 독립적 코드 를 사용 -fPIC하거나 -fpic생성 할지 여부 는 대상에 따라 다릅니다. -fPIC선택은 항상 작동하지만,보다 큰 코드를 생성 할 수있다 -fpic(이것은이 코드의 더 많은 양을 생산할 수 있도록 PIC가 더 큰 경우에 있음을 기억하는 mnenomic). -fpic옵션을 사용하면 일반적으로 더 작고 빠른 코드가 생성되지만 전역 적으로 표시되는 기호 수 또는 코드 크기와 같은 플랫폼에 따라 제한이 있습니다. 링커는 공유 라이브러리를 만들 때 적합한 지 여부를 알려줍니다. 의심 스러울 때는 -fPIC항상 작동하기 때문에를 선택 합니다.


답변

로부터 GCC 매뉴얼 페이지 :

공유 라이브러리에 대한 코드를 생성 할 때 -fpic은 -msmall-data를 의미하고 -fPIC는 -mlarge-data를 의미합니다.

어디:

 -msmall-data
 -mlarge-data
       When -mexplicit-relocs is in effect, static data is accessed via
       gp-relative relocations.  When -msmall-data is used, objects 8
       bytes long or smaller are placed in a small data area (the
       ".sdata" and ".sbss" sections) and are accessed via 16-bit
       relocations off of the $gp register.  This limits the size of the
       small data area to 64KB, but allows the variables to be directly
       accessed via a single instruction.

       The default is -mlarge-data.  With this option the data area is
       limited to just below 2GB.  Programs that require more than 2GB
       of data must use "malloc" or "mmap" to allocate the data in the
       heap instead of in the program's data segment.

       When generating code for shared libraries, -fpic implies
       -msmall-data and -fPIC implies -mlarge-data.


답변