Visual Studio LNK 4222 경고 - exported symbol 'symbol' should not be assigned an ordinal
IT Story/Programming Language 2009/05/18 11:22|
LNK4222 경고는 주로 Visual Studio 6.0 에서 개발한 dll 을 2003 이상에서 빌드할 때 발생한다. 6.0 에서는 보통 dll 의 def 파일을 다음과 같이 생성한다. 예를 들어 dll 의 TEST.def 파일이 아래와 같이 되어있다면 DllCanUnloadNow @1 PRIVATE DllGetClassObject @2 PRIVATE DllRegisterServer @3 PRIVATE DllUnregisterServer @4 PRIVATE Visual Studio 2003 이상의 컴파일러는 다음과 같은 경고를 발생시킨다. 1>.\TEST.def : warning LNK4222: 내보낸 'DllCanUnloadNow' 기호를 서수로 지정하면 안 됩니다. 1>.\TEST.def : warning LNK4222: 내보낸 'DllGetClassObject' 기호를 서수로 지정하면 안 됩니다. 1>.\TEST.def : warning LNK4222: 내보낸 'DllRegisterServer' 기호를 서수로 지정하면 안 됩니다. 1>.\TEST.def : warning LNK4222: 내보낸 'DllUnregisterServer' 기호를 서수로 지정하면 안 됩니다. ( Visual Studio 영문 버전의 경고 문구는 아래와 같다. ) warning LNK4222: exported symbol 'DllRegisterServer' should not be assigned an ordinal http://msdn.microsoft.com/ko-kr/library/8e705t74(VS.80).aspx 위의 MSDN 을 읽어보면 도움을 얻을 수 있는데, 결과적으로 얘기하자면 6.0 에서 쓰던 것과 같은 서수 표기방식은 아래 함수들에 대해서는 사용하면 안된다. ( 이유 : 기호를 서수로 표기할 경우 실제 사용할 주소 테이블보다 큰 슬롯을 사용할 수 있음 ) 그러므로 아래 함수들에 대해서는 서수 표기방식을 사용해서는 안된다. DllCanUnloadNow DllGetClassObject DllGetClassFactoryFromClassString DllInstall DllRegisterServer DllRegisterServerEx DllUnregisterServer 위의 def 파일 코드는 아래와 같이 고쳐주면 깔끔하게 해결이 된다. DllCanUnloadNow PRIVATE DllGetClassObject PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE 'IT Story > Programming Language' 카테고리의 다른 글
|
댓글을 달아주세요!


이올린에 북마크하기
이올린에 추천하기



