| |||
| Home > ARM 컴파일러 시작하기 > AAPCS(프로시저 호출 표준) 지정 > 위치 독립 한정자 | |||
이러한 --apcs 한정자는 위치 독립성을 제어할 뿐 아니라 재진입 및 스레드
안전 코드에도 영향을 줍니다.
자세한 내용은 다음 항목을 참조하십시오.
Compiler Reference Guide의 2-4페이지의 --apcs=qualifer...qualifier
Libraries Guide의 2-5페이지의 재진입 및 스레드 안전성 코드 작성
/ropi 또는 /rwpi 또는 /fpic로
코드를 컴파일하는 경우 제한이 있습니다. 주요 제한은 다음과 같습니다.
C++를
컴파일할 때 --apcs /ropi를 지정할 수 없습니다. /ropi를
지정하여 C++의 C 하위 세트만 컴파일할 수 있습니다.
올바른 C인 일부 구문이 --apcs=/ropi 또는 --apcs=/rwpi에
대해 컴파일할 때 작동하지 않습니다. 예를 들면 다음과 같습니다.
int i; // rw
int *p1 = &i; // this static initialization does not work
// with --apcs=/rwpi --no_lower_rwpi
extern const int ci; // ro
const int *p2 = &ci; // this static initialization does not work
// with --apcs=/ropi
그러나 이러한 정적 초기화를 사용할 수 있도록 설정하려면 --lower_rwpi 및 --lower_ropi 옵션을
사용하십시오.
이 코드를 컴파일하려면 다음을 입력하십시오.
armcc --apcs=/rwpi/ropi --lower_ropi
이것이 기본값이므로 --lower_rwpi를 지정하지 않아도 됩니다.
C++를 컴파일할 때 --apcs=/fpic를 지정할 수
없습니다. 여기서 가상 테이블 함수 및 typeinfo가 읽기/쓰기 영역에 배치되어
PC 위치에 상대 위치에서 액세스할 수 있습니다.
--apcs=/fpic를 사용하면 컴파일러에서 __declspec(dllexport)가
표시된 함수와 데이터만 내보냅니다.
동일한 명령 행에서 --apcs=/fpic 및 --no_hide_all을
사용하면 컴파일러에서 __declspec(dll*)을 무시하고 모든 extern 변수와
함수를 내보냅니다. 컴파일러는 내보낸 함수에 대해 자동 인라인을 사용하지 않습니다.
예를 들어 System V 또는 ARM Linux 공유 라이브러리를 빌드할 경우 --no_hide_all과 --apcs
/fpic를 함께 사용합니다.
__declspec 키워드에 대한 자세한 내용은 Compiler
Reference Guide에서 4-25페이지의 __declspec
특성을 참조하십시오.