2008-10-05 3 views
3

는 (원래의 질문이 질문을 받았다 : http://www.ogre3d.org/phpBB2/viewtopic.php?t=44832)는 피직스 SDK는 VS2005 (VC8)에 내장되어 를 "내가 VS2008 (VC9)에서 모든 것을 구축하고자하는 동안VC9 및 VC8 lib 디렉토리 호환성

은 누군가가 물었다 .이 모든 vc9 컴파일 된 libs 사용하여 문제가 발생할 및이 vc8 lib 함께 사용되는? "

나는 그날 VC8로 생성 된 .lib 파일 (및 .dll)을 사용하고 vc9 컴파일 된 exe에 포함 시키려고했는데 컴파일러는 .lib 파일을 열 수 없다고 대답했다.

지금, 다른 하나는

내가 VC9 및 VC8 사이 LIB 호환성에 대한 정보를 찾을 수 없습니다 .... 그들은 아무런 문제없이 이런 짓을 대답했다.

이렇게 ... 도움이 되십니까?

답변

3

lib 형식은 COFF (http://msdn.microsoft.com/en-us/library/7ykb2k5f(VS.71).aspx)이고, 또한 COFF는 PE 형식으로 사용됩니다. 따라서 vc8로 빌드 된 모든 라이브러리가 vc9와 링크 될 수있는 것은 아닙니다.

그러나 msdn에서 MS가 VC8으로 컴파일 된 라이브러리가 VC9와 잘 링크 될 것이라고 보장하지 않는 스레드를 발견했습니다. http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/8042a534-aa8b-4f99-81ee-e5ff39ae6e69/)

이 2 비트의 정보를 생각해 보면 다음과 같이 결론 지을 수 있습니다. MS가 완전한 100 % 호환성을 보장하지는 않지만 대부분의 경우 vc8 lib를 vc9 라이브러리와 링크하여 작동 할 것으로 기대합니다.

희망이 도움이됩니다. 오후 8시 30 분 P.S. "컴파일러가 .lib 파일을 열 수 없습니다."라고 씁니다. 링커는 컴파일러가 아닌 링크 할 라이브러리를 열려고하는 링커입니다.

+0

예, 저는 링커를 의미했습니다. :) – Klaim

3

작동하지만 CRT/STL 개체를 공유 할 때 문제가 발생합니다.

그래서 vc8 라이브러리에서 'new'를 수행하고이 객체를 삭제하는 vc9 함수로 반환하면 삭제로부터 어설 션을 가져옵니다.

T* funcInVc8Lib() 
{ 
    return new T(); 
} 

void funcInVC9Program() 
{ 
    T* p = funcInVc8Lib(); 
    // ... 
    delete p; // it should at least assert here (in _CrtIsValidHeapPtr()) 
} 
+0

누가 할당 된 블록의 소유권을 다른 모듈로 넘깁니까? STL 컨테이너가 좋은 예입니다. –