2011/03/22 11:40
셋팅을 잘못해서 생기는 경우가 대부분이므로 발생할때마다 그 상황에 맞추어서 무엇이 문제인지 찾아내야 한다.
일반적인 해결책이 존재하지 않아서 에러를 찾기가 힘들다.
1. DLL이나 LIB 파일을 추가하지 않았는지 확인해보라.
필요한 DLL 파일이나 LIB 파일을 프로젝트에 추가하지 않았을 경우에 LNK2019 Error가 발생한다.
- '프로젝트 속성' 의 '추가족속성' 에 필요한 파일을 추가한다.
- 또는 코드에 직접 전처리기를 이용하여 추가한다.
#pragma comment( lib, "ex.lib" )
2. 프로젝트에 헤더 파일(header file), 구현파일(implementation file)을 추가했는지 확인해보라.
소스코드에는 #include "Ex.h" 처럼 헤더파일을 추가했지만. Viwual Studio의 프로젝트에는 헤더파일과
구현파일을 추가하지 않은 경우에 LNK2019 Error가 발생한다.
3.Release VS Debug mode - 빌드모드(build mode)를 전환하지 않았나 생각해보라.
Visual Studio만의 문제인 것 같지만 Visual Studio는 Release mode와 debug mode의 빌드 셋팅을
'각각' 해주어야한다.
4. c, cpp처럼 다른 확장자를 갖고 있는 파일을 같은 프로젝트에 넣고 링크하지 말아라.
하나의 프로젝트에 c와 cpp파일을 모두 넣고 링크했을 경우에 LNK2019 Error가 발생한다.
c와 cpp는 Naming Mangling이 다르기 때문에 링킹 에러가 나타난다.
- 간단한 메크로를 이용해서 이를 피해갈 수 있다. http://sadiles.blog.me/10099382864 <- 참고
- c확장자를 cpp로 변경한다.
5. inline 함수의 선언과 정의를 헤더 파일과 구현 파일로 분리하지 말아라.
inline함수를 사용할 경우에 선언을 헤더파일(확장자.h)에 두고, 정의를 구현파일(확장자.cpp)에 하면
LNK2019 Error가 생긴다. 함수를 코드에 인라이닝 한다는것은 inline함수를 호출한 부분에 해당 inline함수의
정의를 넣는다는 뜻이다. 그런데 헤더파일에 함수명만 선언되어 있다면 함수 정의를 인라이닝 할 수 없기 때문에
링크에러가 생긴다.
- inline함수의 경우에는 헤더파일에 선언과 정의를 함께 넣어라.
6. template를 사용할 경우에는 선언과 정의를 헤더 파일과 구현 파일로 분리하지 말아라.
C++에서 template의 경우도 inline의 경우와 같이 선언과 정의를 각각의 파일로 분리하면 안된다.
template의 경우에는 동적으로 각각의 형에 맞는 소스코드를 만들어 내는 방법이므로 선언과 정의를 각각의 파일로
분리해서는 안된다. 물론, 이 역시 IDE툴을 잘 이용하면 분리할 수 있는 방법이 있지만 그냥 하나의 헤더파일에
다 구현하는것이 좋다.
http://blog.naver.com/sadiles/10046904781 <- 참고
'해피버드의 플밍 > Link Error' 카테고리의 다른 글
| LNK2019 (0) | 2011/03/22 |
|---|
TAGLNK2019
댓글을 달아 주세요