4.4.2. 조정 파일 명령

조정 파일 명령을 사용하면 다음 작업을 할 수 있습니다.

Note

조정 파일 명령은 전역 심볼만 제어합니다. 지역 심볼은 명령의 영향을 받지 않습니다.

다음 명령이 지원됩니다.

IMPORT

IMPORT 명령은 심볼이 런타임 시 공유 오브젝트에서 정의되도록 지정합니다.

구문

IMPORT [pattern {AS] replacement_pattern} [ ,[pattern AS] replacement_pattern] *

인수 설명:

pattern

0개 이상의 정의되지 않은 전역 심볼과 일치하는 와일드카드 문자(* 또는 ?)를 선택적으로 포함하는 문자열입니다. replacement_pattern이 정의되지 않은 전역 심볼과 일치하지 않으면 링커가 이 명령을 무시합니다. 피연산자는 정의되지 않은 전역 심볼에 대해서만 일치할 수 있습니다.

replacement_pattern

정의되지 않은 전역 심볼의 이름을 바꿀 와일드카드 문자(* 또는 ?)를 선택적으로 포함하는 문자열입니다. 와일드카드는 pattern에 상응하는 와일드카드가 있어야 합니다. pattern 와일드카드와 일치하는 문자는 replacement_pattern 와일드카드로 대체됩니다.

예를 들면 다음과 같습니다.

IMPORT my_func AS func1

정의되지 않은 심볼 my_func를 가져와 func로 이름을 변경합니다.

사용법

현재의 공유 오브젝트나 실행 파일에서 정의된 심볼은 가져올 수 없습니다. IMPORT에는 하나의 와일드카드 문자(* 또는 ?)만 허용됩니다.

동적 심볼 테이블이 있으면 정의되지 않은 심볼은 동적 심볼 테이블에 pattern(제공된 경우), 또는 replacement_pattern(그밖의 경우)으로 포함됩니다.

Note

IMPORT 명령은 정의되지 않은 전역 심볼에만 영향을 줍니다. 공유 라이브러리에서 확인한 심볼은 동적 심볼 테이블에 암시적으로 가져오게 됩니다. 링커는 암시적으로 가져온 심볼을 타겟으로 하는 IMPORT 지시문을 모두 무시합니다.

EXPORT

EXPORT 명령은 다른 공유 오브젝트나 실행 파일이 심볼에 액세스할 수 있도록 지정합니다.

구문

EXPORT pattern {[AS replacement_pattern]} [ ,pattern [AS replacement_pattern] ]*

인수 설명:

pattern

0개 이상의 정의된 전역 심볼과 일치하는 와일드카드 문자(* 또는 ?)를 선택적으로 포함하는 문자열입니다. pattern이 정의된 전역 심볼과 일치하지 않으면 링커가 이 명령을 무시합니다. 피연산자는 정의된 전역 심볼에 대해서만 일치할 수 있습니다.

replacement_pattern

정의되지 않은 전역 심볼의 이름을 바꿀 와일드카드 문자(* 또는 ?)를 선택적으로 포함하는 문자열입니다. 와일드카드는 replacement_pattern에 상응하는 와일드카드가 있어야 합니다. replacement_pattern 와일드카드와 일치하는 문자는 pattern 와일드카드로 대체됩니다.

예를 들면 다음과 같습니다.

EXPORT my_func AS func1

정의된 심볼 my_func의 이름을 func1로 변경하여 내보냅니다.

사용법

심볼을 이미 존재하는 이름으로 내보낼 수 없습니다. EXPORT에는 하나의 와일드카드 문자(* 또는 ?)만 허용됩니다.

동적 심볼 테이블이 있으면 정의된 전역 심볼이 동적 심볼 테이블에 replacement_pattern(제공되는 경우) 또는 pattern(그밖의 경우)으로 포함됩니다.

RENAME

RENAME 명령은 정의된 전역 심볼 및 정의되지 않은 전역 심볼의 이름을 바꿉니다.

구문

RENAME pattern {AS replacement_pattern} [ ,pattern AS replacement_pattern] *

인수 설명:

pattern

0개 이상의 전역 심볼과 일치하는 와일드카드 문자(* 또는 ?)를 선택적으로 포함하는 문자열입니다. pattern이 전역 심볼과 일치하지 않으면 링커가 이 명령을 무시합니다. 피연산자는 정의된 심볼 및 정의되지 않은 심볼 모두와 일치할 수 있습니다.

replacement_pattern

심볼 이름이 변경될 와일드카드 문자(* 또는 ?)를 선택적으로 포함하는 문자열입니다. 와일드카드는 pattern에 상응하는 와일드카드가 있어야 합니다. pattern 와일드카드와 일치하는 문자는 replacement_pattern 와일드카드로 대체됩니다.

func1이라는 이름의 심볼을 예로 들면 다음과 같습니다.

RENAME f* AS my_f*

func1my_func1로 이름을 변경합니다.

사용법

타겟 심볼 이름이 자체적으로 변경되는 경우라 해도 심볼을 이미 존재하는 심볼 이름으로 변경할 수는 없습니다. RENAME에는 하나의 와일드카드 문자(* 또는 ?)만 허용됩니다. func1, func2func3 심볼이 포함된 이미지를 예로 들면 다음과 같습니다.

EXPORT func1 AS func2    ;invalid, func2 exists
RENAME func3 AS b2
EXPORT func1 AS func3    ;invalid, func3 exists, even though it is renamed to b2

링커는 조정 파일을 처리한 후에 대체 작업을 수행합니다. 그러므로 1행에서 RENAME A AS B를 사용한 다음 2행에서 RENAME B AS A를 사용할 수 없습니다.

RESOLVE

RESOLVE 명령은 정의되지 않은 특정 참조를 정의된 전역 심볼에 일치시킵니다.

구문

RESOLVE pattern {AS defined_pattern}

인수 설명:

pattern

정의된 전역 심볼과 반드시 일치하는 와일드카드 문자를 선택적으로 포함하는 문자열입니다.

defined_pattern

0개 이상의 정의된 전역 심볼과 일치하는 와일드카드 문자를 선택적으로 포함하는 문자열입니다. defined_pattern이 정의된 전역 심볼과 일치하지 않으면 링커가 이 명령을 무시합니다. 정의되지 않은 참조를 정의되지 않은 심볼에 일치시킬 수 없습니다.

사용법

RESOLVE는 기존 armlink --unresolved 명령 행 옵션의 확장입니다. --unresolved를 사용하면 정의되지 않은 모든 참조가 하나의 정의와 일치하는 반면 RESOLVE를 사용하면 특정 참조와 심볼이 일치하는 경우가 더 많다는 점이 다릅니다.

정의되지 않은 참조는 출력 심볼 테이블에서 제거됩니다.

RESOLVE는 부분 링크를 수행할 때와 일반적으로 링크할 때 작동합니다.

예를 들어 Example 4.4에서 보는 바와 같이 file1.cfile2.c라는 두 개의 파일이 있을 수 있습니다. RESOLVE MP3* AS MyMP3*라는 행이 포함된 ed.txt 파일을 만들고 다음과 같은 명령을 생성합니다.

armlink file1.o file2.o --edit ed.txt --unresolved foobar

이 명령을 사용하면 다음과 같은 결과가 발생합니다.

  • 조정 파일 ed.txt에 지정된 대로 file1.o의 참조(foo, MP3_Init()MP3_Play())가 file2.o의 정의(foobar, MyMP3_Init()MyMP3_Play()에 각각)와 일치하게 됩니다.

  • ed.txtRESOLVE 명령은 MP3 함수와 일치하고 --unresolved 옵션은 남아 있는 다른 모든 참조와 일치합니다. 이 경우에는 foofoobar와 일치합니다.

  • 이미지이거나 부분 오브젝트이거나 관계없이 출력 심볼 테이블에는 foo, MP3_Init 또는 MP3_Play 심볼이 포함되지 않습니다.

Example 4.4. 

file1.c

extern int foo;
extern void MP3_Init(void);
extern void MP3_Play(void);

int main(void)
{
  int x = foo + 1;
  MP3_Init();
  MP3_Play();
  return x;
}


file2.c:

int foobar;
void MyMP3_Init()
{
}
void MyMP3_Play()
{
}

REQUIRE

REQUIRE 명령은 동적 배열에 DT_NEEDED 태그를 만듭니다. DT_NEEDED 태그는 응용 프로그램에서 사용하는 다른 공유 오브젝트(예: 공유 라이브러리)에 대한 종속 관계를 지정합니다.

구문

REQUIRE pattern [ ,pattern] *

인수 설명:

pattern

파일 이름을 나타내는 문자열입니다. 와일드카드는 허용되지 않습니다.

사용법

링커가 pattern 값이 있는 DT_NEEDED 태그를 동적 배열에 삽입합니다. 그러면 현재 로드 중인 파일은 pattern을 로드해야 함을 동적 로더에서 알 수 있습니다.

Note

REQUIRE 명령의 결과로 삽입된 DT_NEEDED 태그는 명령 행에 배치된 공유 오브젝트 또는 DLL에서 생성된 DT_NEEDED 태그 뒤에 추가됩니다.

HIDE

HIDE 명령은 심볼 테이블의 정의된 전역 심볼을 익명 상태로 만듭니다.

구문

HIDE pattern [ ,pattern] *

인수 설명:

pattern

0개 이상의 정의된 전역 심볼과 일치하는 와일드카드 문자를 선택적으로 포함하는 문자열입니다. pattern과 일치하는 정의된 전역 심볼이 없으면 링커가 이 명령을 무시합니다. 정의되지 않은 심볼은 숨길 수 없습니다.

사용법

HIDESHOW를 사용하여 출력 이미지 또는 부분적으로 링크된 오브젝트에서 특정 글로벌 심볼을 익명 상태로 만들 수 있습니다. 오브젝트 파일이나 라이브러리에서 심볼을 숨기는 것은 Example 4.5에서 보는 바와 같이 지적 재산을 보호하는 유용한 방법이 될 수 있습니다. 이 예에서는 os_로 시작하는 심볼을 제외한 모든 전역 심볼이 숨겨진, 부분적으로 링크된 오브젝트가 생성됩니다.

Example 4.5. 

steer.txt

HIDE *            ; Hides all global symbols
SHOW os_*         ; Shows all symbols beginning with 'os_'

이 예를 다음 명령에 링크합니다.

armlink --partial input_object.o --edit steer.txt -o partial_object.o

이 예는 다른 오브젝트와 링크할 수 있습니다(해당 오브젝트에 숨겨진 심볼에 대한 참조가 없을 경우). 출력 오브젝트에 심볼이 숨겨져 있으면 이후 링크 단계에서 SHOW 명령을 사용해도 소용이 없습니다. 숨겨진 참조는 출력 심볼 테이블에서 제거됩니다.

SHOW

SHOW 명령은 이전에 HIDE 명령으로 숨겨진 전역 심볼을 표시합니다. 이 명령은 와일드카드가 있는 HIDE 명령을 사용하여 숨겼던 특정 심볼을 표시하려는 경우에 유용합니다.

구문

SHOW pattern [ ,pattern] *

인수 설명:

pattern

0개 이상의 전역 심볼과 일치하는 와일드카드 문자를 선택적으로 포함하는 문자열입니다. pattern이 전역 심볼과 일치하지 않으면 링커가 이 명령을 무시합니다.

사용법

SHOW의 사용은 HIDE의 사용과 밀접한 관계가 있습니다. 자세한 내용은 HIDE를 참조하십시오.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0206GK
Non-Confidential