문제

VS 2005로 컴파일된 정적 ​​라이브러리(.lib)를 VS 2008로 컴파일된 프로그램과 연결하는 것이 맞습니까?라이브러리와 내 프로그램은 모두 C++로 작성되었습니다.이 프로그램은 Windows Mobile 6 Professional 에뮬레이터에서 실행됩니다.

이것은 작동하는 것 같습니다. 연결 오류는 없습니다.그러나 연결된 라이브러리 내부에서 이상한 일이 발생하기 때문에 시작하는 동안 프로그램이 충돌합니다.예:lib는 큰 음수 크기의 문자 벡터를 반환할 수 있습니다.

프로그램을 VS 2005로 컴파일할 때 이러한 문제는 없습니다.

더 이상한 점은 빌드에 릴리스 구성을 사용할 때만 문제가 발생한다는 것입니다.디버그 구성을 사용하여 컴파일할 때는 문제가 발생하지 않습니다.

도움이 되었습니까?

해결책

VS2005와 VS2008은 서로 다른 STL 구현을 사용합니다.VS2005 코드가 벡터를 반환하면 개체의 메모리 레이아웃은 VS2008에서 예상하는 것과 다릅니다.이것이 반환된 날짜에 깨진 값이 표시되는 이유입니다.

경험상, 프로젝트의 모든 C++ 모듈은 항상 동일한 컴파일러로 컴파일해야 하며 모든 설정/#define은 동일해야 합니다.

비슷한 동작을 일으키는 특정 #define 중 하나는 VS2008의 SECURE_SCL #define입니다.#defining SECURE_SCL은 다양한 C++ 라이브러리 클래스에 더 많은 멤버 변수를 도입하므로 서로 다른 설정으로 컴파일된 두 모듈은 정확히 문제를 발생시킵니다.

다른 팁

설명하신 방식으로 이전 라이브러리에 연결하는 것이 잘못된 것은 아니지만 이상한 동작이 나타나는 것은 놀라운 일이 아닙니다.부부 건강 점검:

  • 두 파일 모두 동일한 버전 ~의 동일한 런타임 라이브러리?
  • .EXE 응용 프로그램이 .LIB가 작성된 것과 동일한 헤더 파일을 "보고" 있습니까?_WIN32_WINNT(등) 매크로가 다음과 같은지 확인하세요. 올바르게 선언.

그리고 .LIB라고 하면 진정한 정적 라이브러리(mylib.lib)를 의미합니까, 아니면 DLL용 가져오기 라이브러리(mylib.lib -> mylib.dll)를 의미합니까?

VS2008 실행 가능 프로젝트의 컴파일/링크 설정은 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top