> 백엔드 개발 > C++ > C 연결은 어떻게 작동합니까? 개체 파일에서 실행 파일까지?

C 연결은 어떻게 작동합니까? 개체 파일에서 실행 파일까지?

Patricia Arquette
풀어 주다: 2024-12-05 18:48:11
원래의
961명이 탐색했습니다.

How Does C   Linking Work: From Object Files to Executable?

C 링크는 실제로 어떻게 작동하나요?

C에서 링크는 여러 개체 파일(.o 파일)과 파일을 결합하는 프로세스입니다. 라이브러리(.a 또는 .so 파일)를 단일 실행 파일(.exe 또는 .out)로 변환합니다. 링커는 개체 파일과 라이브러리 간의 외부 참조를 확인하고 실행 파일을 실행하는 데 필요한 기호 테이블과 기타 정보를 생성합니다.

링크는 어떻게 이루어지나요?

  1. 컴파일: 소스코드를 오브젝트 파일로 컴파일합니다. 각 개체 파일에는 특정 함수나 모듈에 대해 컴파일된 코드뿐만 아니라 해당 모듈 내에서 정의되고 참조되는 기호(변수, 함수, 클래스)에 대한 정보가 포함되어 있습니다.
  2. 재배치: 도중 연결하면 링커는 재배치를 수행합니다. 이는 개체 파일 내의 기호 주소를 실행 파일의 최종 주소와 일치하도록 수정하는 프로세스입니다. 이는 여러 개체 파일이 단일 실행 파일로 결합될 때 기호의 주소가 변경될 수 있기 때문에 필요합니다.
  3. 기호 확인: 링커는 개체 파일과 라이브러리 간의 외부 참조를 확인합니다. 기호가 한 개체 파일에서 참조되고 다른 개체 파일에서 정의된 경우 링커는 정의를 찾고 그 사이에 링크를 만듭니다. 이렇게 하면 실행 파일이 실행될 때 필요한 모든 기호에 액세스할 수 있습니다.
  4. 출력 생성: 모든 외부 참조가 확인되면 링커는 모든 참조를 포함하는 실행 파일을 생성합니다. 객체 파일과 라이브러리의 코드와 데이터. 그러면 실행 파일을 실행할 준비가 되었습니다.

재배치 실제

재배치 프로세스를 설명하려면 다음 예를 고려하십시오.

// a.cpp
int a = 10;
int main() {
  return a;
}
로그인 후 복사
// b.cpp
int b = 20;
로그인 후 복사

a.cpp와 b.cpp를 컴파일하면 a.o와 b.cpp라는 두 개의 객체 파일을 얻게 됩니다. b.o. a.o 파일에는 변수 a의 정의가 포함되어 있고, b.o에는 변수 b의 정의가 포함되어 있습니다.

a.o와 b.o를 함께 링크할 때 링커는 파일에서 a와 b에 대한 참조가 있는지 확인해야 합니다. 최종 실행 파일이 올바른 주소를 가리킵니다. 이는 재배치를 수행하여 수행됩니다.

재배치 중에 링커는 메모리의 최종 주소와 일치하도록 실행 파일의 a 및 b 주소를 수정합니다. 예를 들어 a가 주소 0x1000에 할당되고 b가 주소 0x2000에 할당된 경우 링커는 실행 파일의 a에 대한 모든 참조가 0x1000을 가리키도록 수정하고 b에 대한 모든 참조는 0x2000을 가리키도록 수정합니다.

이 프로세스를 통해 실행 파일이 실행될 때 변수 a 및 b에 올바르게 액세스할 수 있습니다.

위 내용은 C 연결은 어떻게 작동합니까? 개체 파일에서 실행 파일까지?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿