VisualStudio:Warning
Visual Studio 에서 나타나는 경고(Warning)와 그 해결방법에 대하여 설명한다.
PDB관련 LNK4099, LNK4204 링크경고 해결방법
vc90.pdb가 없거나 vc90.pdb는 있는데 그 안에 디버그 정보가 없다는 것. 이번 경우에는 프로토콜버퍼의 3가지 프로젝트가 똑같은 곳에다 vc90.pdb를 생성하는 바람에 파일이 덮어써졌다. 그래서 파일은 있지만 디버그 정보가 없는 경우에 해당한다. 구글의 C++ 테스트 프레임웍의 경우처럼 intermidiate directory(기본은 debug, release)에 프로젝트 이름을 다시 추가하는 방식으로 설정을 바꿔주면 깔끔하게 해결할 수 있다.
C2894
This error happened when you include your header file
just include #include "cs.h"
outside extern c and you are good to go.
LNK2019
- 'symbol' 외부 기호(참조 위치: ' function' 함수)를 확인할 수 없습니다.
- 링커가 "function" 함수에 사용된 "symbol" 외부 기호에 대한 정의를 찾을 수 없습니다. 이 오류를 일으킬 수 있는 문제는 여러 가지입니다.
- 기호 선언의 철자가 기호 정의의 철자와 같지 않습니다.
- 함수가 사용되지만 매개 변수의 형식이나 개수가 함수 정의와 일치하지 않습니다.
- 함수 또는 변수가 선언되었지만 정의되지 않았습니다.
- 함수 선언과 함수 정의 간에 호출 규칙 (Calling convention)이 다릅니다.
- 기호가 C 파일에 정의되어 있지만 C++ 파일에서 extern "C"를 사용하지 않고 선언되었습니다.
- 기호는 정적으로 정의된 후 나중에 파일 외부에서 참조됩니다.
- 클래스의 정적 멤버가 정의되지 않았습니다.
- 빌드 종속성은 솔루션의 프로젝트 종속성으로만 정의됩니다.
- Windows 응용 프로그램에 대한 설정을 사용하여 콘솔 응용 프로그램을 빌드합니다.
- 여러 소스 파일에서 함수 인라이닝에 대해 여러 컴파일러 옵션을 사용합니다.
- 범위 밖의 자동 변수를 사용합니다.
- 내장 함수를 호출하거나 대상 아키텍처에서 지원하지 않는 내장 함수에 대해 인수 형식을 전달합니다.
- 네이티브 wchar_t를 사용하는 코드와 wchar_t를 사용하지 않은 코드를 혼합했습니다.
LNK2038
Mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease'
- 사용하는 라이브러리들의 런타임 라이브러리를 일치시켜야 한다.
- 관련 플래그는
/MT
,/MD
이다.
LNK2038
Release모드에서 _DEBUG
가 설정되어있을 수 있다. NDEBUG
와 같은 관련 매크로를 확인해보자.
LNK4217
- 지역으로 정의된 'symbol' 기호를 'function' 함수로 가져왔습니다.
- 기호가 지역으로 정의되어 있지만 기호에 대해
__declspec(dllimport)
가 지정되었습니다.__declspec
한정자를 제거하여 이 경고를 해결하십시오.
R6034
DLL과 같은 Runtime library와 관련된 오류가 발생된 경우 이러한 오류가 발생된다. depends와 같은 유틸리티를 사용하여 종속성을 해결하거나 Manifest를 수정해야 한다.
Not found ssize_t
증분 링크 테이블 (Incremental Link Table; ILT)
링크 단계에 아래와 같은 경고가 발생될 수 있다.
해당 파일을 지우고 다시 빌드하면 된다.
See also
References
-
Visual_studio-LNK4099_LNK4204_warning.zip ↩