블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

Libci.lib에 대한 Link 에러 문제이군요.

VS .NET 2003으로 오면서 2002까지 지원하던 '구 버전의 iostream Library'를 더이상 'CRT'에 포함하지 않게 되었습니다.

'구 버전의 iostream Library'가 무엇인고 하니 바로 아래에 나와있는 것들입니다.

LIBCI.lib : Single-thread, Static Link /ML
LIBCIMT.lib : Multithreaded, static link /MT
MSVCIRT.lib : Multithreaded, dynamic link /MD

이것들이 이제 더이상 존재하지 않습니다. C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib 경로를 살펴보면 없지요.

'새 버전의 iostream Library'는 다음과 같습니다.

LIBC.lib : Single-threaded, static link /ML
LIBCMT.lib : Multithreaded, static link /MT
MSVCRT.lib : Multithreaded, dynamic link /MD

딱 보니까 이름 짓는 규칙을 아시겠지요? 'i'자가 붙은 게 바로 구형 iostream이고 MS에서 사장시키기로 작정한 것 같습니다. (각 lib의 디버그 버전에는 파일명에 'd'자가 하나씩 더 붙지요.)

원래는 LIBC.lib와 그의 형제들에 구 버전의 iostream이 탑재되어 있었는데, VC++ 4.1 이후부터 iostream을 바꾸고, 기존 것을 계속 쓰고자 하는 사용자를 위해 'i'자를 붙인 Library를 따로 만들어 분리시켜버린 것 같습니다.

말썽을 일으키고 있는 프로젝트와 '인터넷에서 구한 소스' 등이 말썽을 일으키는 것은, 해당 프로젝트에서 구 버전의 iostream을 사용하도록 'Default Library'를 명시적으로 지정하였기 때문이 아닌가 싶네요.

이 문제를 피할려면, 기존 프로젝트의 Default Library를 무시하도록 링커 옵션에서 '모든 기본 라이브러리 무시'를 선택하시거나 '특정 라이브러리 무시' 선택하시기 바랍니다. 이렇게 하면 /NODEFAULTLIB 링커 옵션이 추가됩니다.

이 내용들은 MSDN에 보다 상세하게 나와있습니다.

반응형
Posted by blueasa
, |