난 이미 읽은 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.