2.6.2. 위치 독립 한정자

이러한 --apcs 한정자는 위치 독립성을 제어할 뿐 아니라 재진입 및 스레드 안전 코드에도 영향을 줍니다.

자세한 내용은 다음 항목을 참조하십시오.

위치 독립적인 코드 및 데이터에 대한 제한

/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 특성을 참조하십시오.

Copyright © 2002-2007 ARM Limited. All rights reserved.ARM DUI 0205HK
Non-Confidential