게임학원, 게임프로그래머 취업 전문 교육기관 DirectX11/12 자체엔진 게임개발과정,서버프로그래밍,자료구조,알고리즘,유니티,언리얼 게임학원, 언리얼학원 C++ 왕초보 강의 9강:컴파일·링크 에러 완전 정리
본문 바로가기

C++ 왕초보 강의 9강:컴파일·링크 에러 완전 정리

C++를 배우다 보면, 어느 순간부터 코드보다
에러 메시지가 더 무서워지는 순간을 마주하게 됩니다.

분명 강의에서는 이해했다고 생각했는데,
막상 직접 코드를 작성하고 실행하면
컴파일 에러, 링크 에러, 심지어 실행 중 에러까지 연달아 등장하죠.

“이게 왜 안 되는 거지?”
“내가 뭔가 크게 잘못한 건가?”

이런 생각이 들면서
많은 분들이 C++ 학습 과정에서
한 번쯤은 성장을 멈춰버리는 지점에 서게 됩니다.

하지만 분명히 짚고 넘어가야 할 사실이 하나 있습니다.
에러는 실력이 부족해서 생기는 문제가 아니라,
실력이 자라고 있다는 증거라는 점! 

이번 글에서는 많은 분들이 가장 헷갈려 하는
✔ 컴파일 에러
✔ 링크 에러
✔ 런타임 에러의 차이를
실제 예제와 함께 하나씩 정리해보며,

“에러를 피하는 방법”이 아니라
“에러를 읽고 해결하는 방법”에 집중해 보려고 합니다.

<같이 보면 좋을 C++ 위기 극복 시리즈>

 
 

C++ 프로그래밍 언어 7강 : Template 공포증 극복하기

그리고 여기서 많은 분들이 프로그래밍 언어 C++ 학습 중 처음 마주하는 코드! <같이 보면 좋을 C++ ...

blog.naver.com

 

C++ 프로그래밍 언어 8강: STL 미로 탈출 가이드

[ C++ 위기 극복 시리즈 이전 강의 살펴보기 ] 1. STL 이란 무엇인가? 2. 흐름도 : STL 사용 원리 3...

blog.naver.com


1. 컴파일과 링크의 차이

C++ 빌드 과정은 크게 두 단계로 나뉩니다.

1) 컴파일(Compile)
● 소스 코드(.cpp)를 기계어 코드(.obj, .o)로 변환
● 문법 오류, 타입 오류 등을 잡아냄

2) 링크 (Link)
● 여러 개의 오브젝트 파일(.obj, .o)과 라이브러리를 합쳐 실행 파일 생성
● 선언만 있고 정의가 없을 때 발생하는 에러가 주로 링크 단계에서 나타남


즉, 컴파일 에러 = 문법 문제, 링크 에러 = 코드 연결 문제입니다.


2. 흐름도 : 빌드 과정

[소스 코드]
    ↓   (컴파일) 
[오브젝트 파일]
    ↓   (링크)
[실행 파일]

어디서 에러가 발생했는지에 따라 원인을 좁힐 수 있습니다.


3. 예제 1 : 컴파일 에러 (문법 오류)

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello" << endl
    return 0;
}

출력

error : expected ';' before 'return'

● 원인 : 세미콜론( ; ) 빠짐
● 해결 : endl 뒤에 ; 추가


4. 예제 2 : 링크 에러 (정의 누락)

#include <iostream>
using namespace std;

void Hello();    // 선언만 있음 

int main()
{
    hello();

    return 0;
}
// hello.cpp
// void hello() {cout << "Hello"; } ← 이 부분을 실수로 빼먹음

출력

LNK2019 : unresolved external symbol "void __cdecl hello(void)"

● 원인 : 선언만 있고 정의가 없음
● 해결 : hello() 함수 정의 추가


5. [예제 3] : 런타임 에러 (실행 중 오류)

int arr[3] = {1, 2, 3};
cout << arr[5];    // 범위 초과

출력

Segmentation fault (core dumped)

● 원인 : 배열 인덱스를 벗어남.
● 해결 : 인덱스 범위를 반드시 확인


6. 비전공자들이 자주 하는 오해

 

1) 에러 = 망했다
● 에러는 자연스러운 과정. 오히려 "코드가 어디서 틀렸는지 알려주는 힌트"입니다.

2) 메시지가 너무 길어서 무의미하다.
● 사실 중요한 부분은 앞부분(에러 종류, 라인 번호) 입니다.

3) 링크 에러 = 컴파일러 버그
● 대부분은 선언 / 정의 불일치, 빌드 설정 문제입니다.


7. 실행 추적 예시(에러 메세지 읽기)

에러 메세지 예:

main.cpp(10): error C2143: syntax error: missing ';' before 'return'

읽는 순서:

1) 파일명 : main.cpp
2) 줄번호 : (10)
3) 에러종류 : syntax error
4) 원인 : 세미콜론 누락

이렇게 분류해서 읽으면 쉽게 원인을 찾을 수 있습니다.


8. 극복 전략

● 에러 메세지를 무시하지 말고, 앞부분부터 차근차근 해석하기.
● 컴파일 에러는 주로 세미콜론, 괄호, 타입 불일치 문제.
● 링크 에러는 주로 선언과 정의 불일치, 라이브러리 누락 문제.
● 에러를 만날 때마다, "디버깅 훈련"이라고 생각하기.


9. 마무리 요약

● 컴파일 에러 : 문법 문제(코드 자체에 오류).
● 링크 에러 : 연결 문제(선언/정의 불일치 문제).
● 런타임 에러 : 실행 중 문제(배열 범위, 잘못된 포인터 등).
에러는 장애물이 아니라, 코드가 개선될 수 있도록 알려주는 힌트이다


💬다음 편에서는 10편 - 디버깅의 벽 넘기를 통해,
지금까지 우리를 괴롭혀왔던 에러들을
가장 강력하게 해결할 수 있는 무기,
‘디버거’ 사용법을 본격적으로 다뤄볼 예정입니다.

특히, 현재 저희 어소트락 게임아카데미에서는
교육생들이 에러 메시지 앞에서 멈춰 서지 않도록,
단순한 문법 설명이 아닌 문제 해결 능력 자체를 키우는 방향으로 교육을 진행하고 있습니다.

왜 이 에러가 발생했는지, 디버거로 어디를 먼저 확인해야 하는지,
수정 이후 어떤 결과를 기대해야 하는지 이 모든 과정을
실습 중심 수업과 1:1 피드백을 통해 반복적으로 경험하게 되죠.

(언리얼엔진)3D게임 클라이언트 개발자 양성과정▼

 

어소트락게임아카데미

언리얼공인교육기관(UATC), 언리얼공인개발자서포터(UDN), DIRECTX 자체게임엔진 프로그래머양성 전문 교육기관

assortrock.com

뿐만 아니라, 어소트락 유튜브 채널에서는 기초 문법과
개발 환경 이해를 중심으로 한
무료 강의 콘텐츠도 함께 제공하고 있습니다.

본격적인 실습에 앞서,
기초 개념을 정리하는 용도로 활용해 보셔도 좋겠죠?

 

그렇다면, 이제 에러를 피하는 단계에서 벗어나
에러를 다룰 줄 아는 개발자로
한 단계 성장해 볼 차례!

다음 편, 디버깅의 벽을 함께 넘어가 보겠습니다.


실전 개발 흐름, 제대로 경험해 보고 싶다면?
현재 모집 중인 어소트락 교육과정