문제

나는 비슷한 질문이 몇 가지 있다는 것을 알고 있지만, 그들이 내 것과 같은 요구 사항을 실제로 가지고 있다고 생각하지 않습니다.

우리의 DLL은 Visual Studio 2005와 함께 컴파일됩니다 ~ 해야 하다 설치 제약으로 인해 특정 버전의 CRT와 연결됩니다. 이것은 절대적이며 최신 버전으로 다시 컴파일하는 것은 솔루션이 아닙니다.

최근에 Boost Libraries를 업데이트했습니다. 그러나 부스트를 구축하면 최신 CRT를 자동으로 사용했습니다. 이제 Boost를 프로그램과 연결하면 CRT의 최신 (잘못된) 버전과 CRT의 오래된 (올바른) 버전 모두에 종속성을 만듭니다. 최신 버전에 대한 의존성은 가야합니다.

이 문제에 대한 가장 좋은 해결책은 무엇입니까? 현재 내가 생각할 수있는 가장 좋은 것은 이전 버전을 사용하여 부스트를 재건하는 것입니다. 그러나 소스를 수정하지 않고 쉽게 수행하는 방법은 모르겠습니다.

Visual Studio가 전 세계적으로 특정 버전의 CRT를 사용하도록 강요하는 방법이 있다면 (프로젝트별로는 아님), 그것은 좋을 것입니다. 또는 최신 버전의 CRT를 제거하는 방법이지만 OS의 일부로 간주된다고 생각하기 때문에 불가능하다고 확신합니다.

도움이 되었습니까?

해결책 2

이 솔루션은 CRT가 동적으로 연결된 상태에서 구축되었으므로 최신 CRT의 의존성을 제거하기 위해 임베디드 매니페스트를 수동으로 수정했습니다. 그래도 나는 이것의 안전에 의문을 제기합니다.

어떤 이유로, 부스트 빌드 프로세스 중에 TargetSXS 파일을 포함하는 힘은 지정된 CRT를 대상으로하지 않았다.

다른 팁

AFAIK, 다른 버전의 CRT를 사용하는 것이 좋습니다. .NET 2.0 DLL에서 .NET 1.1 DLL을 참조 할 수있는 .NET과 달리 관리되지 않은 경우 유연성을 제공하지 않습니다.

최신 CRT를 사용할 수 있도록 DLL을 업그레이드 할 수 없으므로 VS2005의 BUST를 재건하는 것입니다.

또한 다른 CRT의 두 DLL을 연결하는 데 권장되지 않습니다. 메모리 부패와 같은 문제로 이어질 수 있습니다.

참고 : 각 Visual Studio에는 모든 DLL이 참조하는 기본 CRT 버전이 있습니다.

또한 "새 CRT 제거"를 이해하지 못했습니다. 사용하는 각 버전의 Visual Studio에 대해 Visual Studio Redist를 설치해야합니다. (Redist는 CRT DLL을 포함합니다)http://msdn.microsoft.com/en-us/library/abx4dbyh%28vs.80%29.aspx

부스트 프로젝트에서 어떤 구조물이 잘못된 CRT에 의존성을 주입하고 해당 구조를 제거/수정 해야하는지 정확히 찾아야합니다. .VCPROJ 파일 또는 일부 매니페스트 또는 그와 비슷한 것일 수 있습니다.

VC ++ 2005 및 VC ++ 2008 CRT에는 동일한 프리미티브가 포함되어 있습니다. VC ++ 2005로 완전히 부스트하거나 약간 조정하고 그 후 다시 컴파일 할 수 있습니다. 예, 이것은 약간의 노력이 필요하지만, 이는 유일한 방법입니다. 코드와 부스트 코드는 모두 사용하려는 CRT 버전에 대해 컴파일해야합니다.

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