c + + 컴 파 일 러 와 링크 기 링크 작업 원리
여 기 는 대학 과정 에서 배 운 을 토론 하 는 것 이 아니 라 제 가 C + 컴 파일 러 와 링크 기의 작업 원리 에 대한 이해 와 견 해 를 썼 을 뿐 입 니 다. 제 수준 으로 는 컴 파일 원 리 를 설명 하지 못 했 습 니 다. (이것 은 복잡 하고 대학 때 거의 배우 지 못 했 습 니 다)알 아야 할 몇 가지 개념: 1. 컴 파일: 컴 파일 러 가 소스 파일 을 컴 파일 하 는 것 은 바로 소스 파일 에 존재 하 는 소스 코드 를 기계 언어 형식의 목표 파일 로 번역 하 는 과정 이다. 이 과정 에서 컴 파일 러 는 일련의 문법 검 사 를 할 것 이다.컴 파일 이 통과 되면 해당 CPP 를 OBJ 파일 로 변환 합 니 다.2. 컴 파일 유닛: C + 표준 에 따라 모든 CPP 파일 은 컴 파일 유닛 입 니 다.모든 컴 파일 단원 간 은 서로 독립 되 고 서로 알 수 없다.3. 대상 파일: 컴 파일 로 생 성 된 파일 은 기계 코드 형식 으로 컴 파일 단원 의 모든 코드 와 데 이 터 를 포함 하고 기호 표 가 해결 되 지 않 은 경우 기호 표 와 주소 재 설정 표 내 보 내기 등 다른 정보 도 있 습 니 다.대상 파일 은 바 이 너 리 형식 으로 존재 합 니 다.
C++ , (Translation Unit) .cpp include .h ,.h .cpp , .cpp .obj , PE(Portable Executable, Windows ) , , , main 。 .cpp , .exe .dll 。
다음은 컴 파일 러 의 작업 과정 을 분석 합 니 다. 우 리 는 문법 분석 을 뛰 어 넘 고 목표 파일 의 생 성 에 직접 옵 니 다. 만약 에 우리 가 A. cpp 파일 이 있다 고 가정 하면 다음 과 같은 정의 가 있 습 니 다. int n = 1;void FunA() { ++n; }
A.obj ( ), , n、FunA, :
0x0000 n 4
0x0004 FunA ??
: , ,?? , , 0x0000 。
FunA :
0x0004 inc DWORD PTR[0x0000]
0x00?? ret
++n inc DWORD PTR[0x0000], 0x0000 DWORD(4 ) 1。
B.cpp , :
extern int n;
void FunB()
{
++n;
}
B.obj :
0x0000 FunB ??
n , n extern, extern n , 。 , n , FunB n , FunB :
0x0000 inc DWORD PTR[????]
0x00?? ret
? 。
( ????), , **“ ”**, unresolved symbol table。 , n **“ ”** exprot symbol table, 。
, , , : , 。 ? :** **。 C/C++ , , n n, , FunA _FunA( )。
,
A.obj
n 0x0000
_FunA 0x0004
( )。
B.obj
_FunB 0x0000
n 0x0001
, 0x0001 , , n。
, B.obj , , , B.obj 。 , 。 , A.obj n, n B.obj 0x0001 。
, , ,B.obj FunB inc DWORD PTR[0x000]( n A.obj 0x0000), 0x0000 , 。 。 , B.obj 0x0000 0x00001000 , A.obj 0x0000 0x00002000 , ,A.obj 0x00002000,B.obj 0x00001000。 。
n 0x00002000, FunA inc DWORD PTR[0x0000] , , ,address redirect table。
** :**
: , 。
: 。
: , 。
: 。
** :**
, 。 , ( , )。 , , 。 , , 。
: , , , , 。
, 。
: unresolved external link.. , , 。 , 。( , , ), duplicated external simbols... , 。 , 。 C/C++ : extern: , , 。( ) static: , / 。 。( )。 static , , 。 : , , const , 。( extern static ) : , ( )。 ( duplicated external simbols) : , 。 。 : , , , , duplicated external simbols。 , 。 , : const int n = 0 。 , 。 , , , , 。 : , , , , , , 。 , 。 : : class A { static char msg[] = "aha"; }; , class , , const 。 C++ , const : , C const int , 。 const , 。 : 2 : 1。 const , , 。( ) 2。 mutable , , 。 : const 。 ,int/char , , 。 : C++ , 。 : , .cpp , , 。 .cpp , cpp 。 : , 。 , : , , , 。 export : export ,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.