~cpp _msvc_warnings_off.h
가 준비되어 있음)~cpp LIBxxx.lib
버전과 ~cpp MSVCxxx.lib
버전으로 나뉩니다. 프로젝트에서 조정하는 부분은 Project > Setting 메뉴로 열리는 C/C++ 탭입니다. C/C++ 탭에서 "Code Generation" 카테고리를 선택하면 Use Run-time Library 드롭다운 박스를 조정해 줄 수 있습니다. 여기서 디버그 정보 포함(debug) 유무, 런타임 라이브러리의 스레딩(thread) 모드, 동적 링크 여부(DLL)의 조합을 결정해 줄 수 있습니다. 긴 설명은 빼고, 간단히 정리하면 다음과 같습니다. (MSDN의 설명을 참고하여 정리하였습니다)"Use Run-time Library" 항목 | 이름 | 특징 | 컴파일 옵션 | 환경변수정의 |
Single-Threaded | LIBC.LIB | 단일 스레드, 정적 링크 | /ML | |
Multithreaded | LIBCMT.LIB | 다중스레드, 정적 링크 | /MT | _MT |
Multithreaded DLL | MSVCRT.LIB | 다중스레드, 동적링크 | /MD | _MT, _DLL |
"Use Run-time Library" 항목 | 이름 | 특징 | 컴파일 옵션 | 환경변수정의 |
Single-Threaded | LIBCP.LIB | 단일 스레드, 정적 링크 | /ML | |
Multithreaded | LIBCPMT.LIB | 다중 스레드, 정적 링크 | /MT | _MT |
Multithreaded DLL | MSVCPRT.LIB | 다중 스레드, 동적 링크 | /MD | _MT, _DLL |
~cpp LNK2005
에러와 ~cpp LNK4098
경고가 동시에 나는 경우가 있습니다. 이런 에러가 나올 것입니다.~cpp LIBCMT.lib(osfinfo.obj) : error LNK2005: __alloc_osfhnd already defined in LIBC.lib(osfinfo.obj) LIBCMT.lib(osfinfo.obj) : error LNK2005: __set_osfhnd already defined in LIBC.lib(osfinfo.obj) . . . LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library <실행파일경로> : fatal error LNK1169: one or more multiply defined symbols found Error executing link.exe.이는, VC가 코드 생성 옵션을 무시하고 LIBCMT.lib을 기본적으로 덧대어 넣어주기 때문입니다. 실행파일을 만드는 경우라면 에러가 가장 성가실 테지만, 배포용 라이브러리를 만들 경우엔 경고도 없애 주어야 합니다. 이 에러와 경고를 없애기 위해서는, 위에 나온 링커 메시지 대로 /NODEFAULTLIB 옵션을 써야 합니다. VC IDE를 쓰고 계시다면 Project->Setting 메뉴를 선택하고 나오는 대화상자에서 "Link" 탭을 선택하시고, "Input" 드롭다운 항목을 고른 후에 "Ignore Libraries" 에디트 상자에 LIBCMT.lib를 써 넣으시면 됩니다.
~cpp test\eh\vc6.mak test\regression\vc6.mak자동으로 테스트까지 해 줄 겁니다.
~cpp e:\microsoft visual studio\vc98\include\stlport\stl\_threads.h(122) : error C2733: second C linkage of overloaded function 'InterlockedIncrement' not allowed e:\microsoft visual studio\vc98\include\stlport\stl\_threads.h(122) : see declaration of 'InterlockedIncrement'이 컴파일 에러를 막으려면, STLport가 설치된 디렉토리(대개 C:/Program Files/Microsoft Visual Studio/VC98/include/stlport이겠지요) 에서 stl_user_config.h를 찾아 열고, 다음 부분을 주석 해제합니다.
~cpp // # define _STLP_NEW_PLATFORM_SDK 1