링커, 로더, 실행 파일

링커에서 약한 심볼(weak symbol)의 취급으로 올바른 것은?

  1. A약한 심볼은 항상 다른 정의보다 우선한다
  2. B같은 이름의 일반적인(강한) 정의가 있으면 그쪽이 사용되고, 없으면 약한 정의가 사용된다
  3. C약한 심볼을 포함한 파일은 링크할 수 없다
정답과 해설 보기

정답: B. 같은 이름의 일반적인(강한) 정의가 있으면 그쪽이 사용되고, 없으면 약한 정의가 사용된다

약한 심볼은 「다른 정의가 없으면 이것을 쓴다」라는 예비 정의입니다. 임베디드 소프트웨어에서는 인터럽트 핸들러의 기본 처리를 약한 심볼로 준비해 두고, 사용자가 같은 이름의 함수를 작성하면 그것으로 교체되게 하는 사용법이 자주 보입니다. 강한 정의끼리 겹치면 다중 정의 오류가 되지만, 약한 정의와 겹치는 것은 오류가 되지 않습니다.

  • A. 반대로 강한 정의에 밀립니다.
  • B. 올바릅니다. 기본값으로서 교체 가능한 정의를 준비할 수 있습니다.
  • C. 문제없이 링크할 수 있습니다.
이 분야 연습하기 분야로 돌아가기

링커, 로더, 실행 파일의 다른 문제

  1. C++ 컴파일러가 함수 이름에 인수 타입 등의 정보를 덧붙여 심볼 이름을 만드는 「이름 장식(맹글링)」의 주된 목적은?
  2. Linux의 dlopen 함수(Windows의 LoadLibrary에 해당)의 용도로 가장 적절한 것은?
  3. 100개의 프로세스가 같은 공유 라이브러리를 사용하고 있을 때, 물리 메모리 사용 방식으로 올바른 것은?
  4. 오브젝트 파일을 역어셈블했더니 외부 함수 printf를 호출하는 명령의 분기 대상이 0 같은 임시 값으로 되어 있었다. 이 값은 언제 올바르게 채워지는가?
  5. 임베디드 개발에서 사용하는 링커 스크립트의 역할로 올바른 것은?

이 분야의 비교