이 비디오에서는 링커 에러와 왜 발생하는지 알아보도록 하죠
링커 링커 링커가 프로그램의 모든 조각을 모아 실행파일을 생성하려 할 때 오류가
발생합니다 한 개 이상의 조각이 빠져 있죠
일반적으로 이건 링커가 개체 파일이나 라이브러리를 찾을 수 없을 때 발생하죠
링크 오류는 고치기 어려워요
네 때로는 경로를 바로잡아서 링커가 빠진 조각이 어디 있는지 알게
하는 게 문제죠
네 코드 라이트로 가서 프로그램이 링커 에러를 발생시키도록 하죠 오류 메시지가 어떻게
생겼는지 보실 수 있어요
여기 예제 코드는 구문을 무시하세요
C++ 코드인데 링커 에러와 관련 있어요
개울은 걱정하지 마세요
그건 걱정 마세요
링크 에러는 C와 C++에서도 동일하다는 거죠
코딩 예제는 링커 에러를 다시 시연해보려는 것 뿐인데요
코드 라이트입니다 링커 에러라는 프로젝트를 만들었습니다 우리가 사용하는 템플릿에 기반해서요
메인 요리만 남았네요 cpp 파일에 Hello world라고 돼 있어요
이제 여기서 강제로 링커 에러를 발생시키죠
네 일반적으로는 할 수 없는 일이지만 오류가 어떻게 생겼는지 보여드리고
싶어요
네 제가 하려는 말은 EXtern int c 혹은 그냥 X라고 하죠 이 모든 걸 잠시
후에 설명할게요
그리고 메인 부분의 몸통에는 X자를 사용하려고 해요
그냥 정수죠 그걸 프린트하고 싶다고 치죠
X를 출력하면 돼요 간단하죠
저장할 거예요
제가 이 프로그램을 컴파일하면 어떻게 되는지 보세요
컴파일을 오른쪽 클릭할게요
깨끗한 컴파일도 있어요
프로그램에는 문제가 없지만 빌드하고 실행하려고 하면요
링커 에러가 보일 거예요
전형적인 링커 오류죠
뭔가에 대한 정체불명의 참고 자료요
이 경우엔 x일 뿐이죠
링크하는 사람이 하나를 반환한 게 보이시죠
LD는 출구 상태를 응답하죠
링크에 문제가 있었어요
컴파일러는 괜찮았어요 컴파일러 오류가 없으니까요
한 번 더 하죠
컴파일이에요
실수도 없고 경고도 없어요
무슨 일인지 설명해 드릴게요
스타일러스를 잠깐 꺼낼게요
네 여기 메인 CPP 파일이 있는데요 메인.0으로 컴파일 될 겁니다 말하자면요 메인.Object라고
하죠
여기 EXE가 참조되네요
여기서 볼 수 있어요
여기 사용할 EXe에 대한 참조가 있어요
네 네 이제 O 스트림 라이브러리도 있으니 링커는 이 라이브러리를 잡아야 해요 여기서 i.O 스트림을
입력하면 무슨 말인지 아실 거예요
링커가 이 둘을 합쳐서 메인 EXe를 만들어야 해요
이 경우엔 링커 Errorexe가 되겠죠
무슨 말인지 알죠?
컴파일은 괜찮아요
객체 파일을 생성했고요
이 도서관은 존재해요
컴파일러에게 x는 내 안에 없다고 말한 게 문제였죠
다른 데 있어요
다른 사람이 정의하는 거죠
물론 다른 사람이 정의한 건 아니죠 그게 이슈가 됐으니까요
이제 링크는 그 X를 해결해야 하죠 이렇게 말합니다 좋아요 어디서 값을 프린트하죠?
지금 여기서 그걸 해달라고 했잖아요
x 값을 출력하고 싶어요
X는 어디 있죠?
못 찾겠어요
링커 에러예요
바로 그거예요
다시 만들게요 오류 메시지를 한 번 더 보실 수 있게요
만들고 실행하는 거죠
오류 메시지가 있네요
X에 대한 정의가 없는 참조라고 하네요
상황을 정확히 볼 수 있어요
X를 못 찾네요
이건 컴파일러 오류가 아니에요
링크 오류예요
중요한 점이에요
링커 에러는 고치기 까다롭죠
링크해야 할 파일이 많이 없어졌어요
엉뚱한 곳에 있어요
걱정 마세요 걱정할 필요 없어요 코드 라이트를 이용해 모든 걸 직접
할 겁니다
타사의 라이브러리를 사용한다면 이런 게 중급 또는 고급 과정 때 우리가
얘기할 것들이죠
네 링커 에러를 보여드리고 싶었어요 하나 발견하면 포럼에 올리세요
함께 해결해 보죠