2012-02-15 1 views
0

나는 implicitly dll Z. dll A에 대한 링크도 explicitly dll B에 링크되어 있는데, implicitly은 dll Z '(다른 버전의 Z dll)에 링크되어있다.암묵적으로 DLL과 그 의존성을 충돌없이 어떻게 연결합니까?

일부 추가 요소는 다음과 같습니다.dll B는 시스템의 어느 위치 에나 배치 할 수 있으며 런타임시 XML 파일을 통해 런타임에 DLL의 위치가 표시되며 loadlibrary를 사용하여로드됩니다.

Google의 통제 범위를 벗어나는 제한 사항으로 인해 환경 경로를 변경할 수 없습니다.

내가 갖고있는 문제는 dlls A와 B가 올바른 버전의 Z dll을 사용한다는 것입니다.

어떤 옵션이 있습니까?

+3

당신은 멍청이에요. 동일한 라이브러리의 두 가지 다른 버전을 "암시 적으로"로드 할 수는 없습니다 (나는 "dlopen'을 사용하지 않고 이것을"전체 호출 "이라고 부릅니다). 라이브러리가 PIC가 아니면 동일한 가상 주소 공간에 두 개의 다른 심볼 집합이 필요하며 명확하게 불가능합니다. – Borealid

+0

기본적으로 유일한 옵션은 out of process COM 서버 같은 두 프로세스 중 하나를 별도 프로세스로 구체화하는 것입니다. –

+0

고마워요, 당신이 대답을 올리면 받아 들일 것입니다. – dangerousdave

답변

1

두 A 또는 B 중 하나의 매니페스트를 수정하여 동일한 Z 버전과 연결되도록 할 수 있습니다. 매니페스트가 포함될 가능성이 높으므로 Microsoft의 매니페스트 도구 mt.exe가 필요합니다. SDK와 함께 사용할 수 있어야합니다. 이는 사용하는 것과 다른 런타임에 링크 된 3 자 도구와 링크 할 때 자주 발생합니다.

관련 문제