2016-09-21 6 views
0
  • VS 2015에서 컴파일 된 정적 라이브러리를 VS 2012에서 사용할 수 있습니까? VS 2012의 C 컴파일러는 매우 오래된 버전입니다. 내가 만나는 가장 일반적인 문제는 변수 선언 위치입니다. 변수는 VS 2012에서 해당 범위의 시작 부분에 선언되어야합니다.Visual Studio 2015 및 2012

  • 그런 호환성이 있다면 헤더 파일에서 컴파일 오류를 수정하고 라이브러리에서 함수를 호출해야합니다. 그게 맞습니까?

답변

1

일반적으로 정적 라이브러리는 다른 버전의 Visual Studio와 호환되지 않습니다.

비주얼 C++ 컴파일러 ABI

https://en.wikipedia.org/wiki/Visual_C%2B%2B#Compatibility

은 역사적으로 주요 컴파일러 릴리스간에 변경되었습니다. 특히 컨테이너 크기가 컴파일러 릴리즈 사이에서 많이 달라지는 STL 컨테이너 인 의 경우입니다. 다른 컴파일러 버전을 사용하여 컴파일 된 클라이언트 코드를 사용하려면 모듈 경계에서 C++ 인터페이스를 사용하지 않는 것이 좋습니다. C++ 대신 C 또는 COM 인터페이스를 사용하는 것이 좋습니다.이 인터페이스는 컴파일러 릴리스간에 안정적인 ABI 을 갖도록 설계되었습니다.

나는 특별히 VS2015 -> VS2012를 시도한 적이 없지만 다른 방법은 확실히 어떤 문제 (VS2012/VS2013 -> VS2015)가 있습니다. 그러나 VS2015에는 특정 문제를 완화하려고 시도하는 문서화되지 않은 라이브러리 (legacy_stdio_definitions.lib 및 legacy_stdio_wide_specifiers.lib)가 있지만 호환성을위한 포괄적 인 것은 아닙니다.

가장 좋은 솔루션은 사용하려는 Visual Studio 버전으로 정적 라이브러리를 컴파일하는 것입니다.