2013-11-27 1 views
1

저는 TBB를 사용하는 Maplink라는 회사의 인텔 TBB 라이브러리와 API를 모두 사용하는 응용 프로그램을 작성하고 있습니다. 문제는 내 응용 프로그램과 Maplink API가 내 응용 프로그램의 바이너리가 들어있는 디렉토리에서 TBB.dll을로드하려고한다는 것입니다. Maplink가 API와 함께 제공 한 TBB.dll 버전은 내 응용 프로그램이 요구하는 버전과 다르며 둘 다 응용 프로그램의 실행 가능 디렉토리에 공존 할 수 없습니다. Maplink API가 사용하는 TBB.dll의 잘못된 버전을로드하지 않도록 TBB를 내 응용 프로그램에 정적으로 연결하는 것 외에 다른 옵션이 있습니까?제 3 자 라이브러리에 내 응용 프로그램이 수행하는 동일한 DLL의 다른 버전이 필요합니다.

+5

최신 버전의 tbb.dll이 둘 다 작동하지 않습니까? – egur

+0

인텔은이 문제를 해결하고 싶지 않습니다 (http://software.intel.com/en-us/forums/topic/286809). –

답변

2

주석에서 언급했듯이 최신 버전의 tbb.dll을 응용 프로그램 디렉터리에 넣을 수 있으며 응용 프로그램과 사용하는 타사 라이브러리 모두에서 제대로 작동해야합니다. 예를 들어 최신 버전 인 TBB 4.2는 TBB 2.0 이전 버전과 이진 호환됩니다.

3

현실 세계에서는 동일한 DLL의 다른 버전을 혼합하는 것은 좋지 않습니다. 실제로 플랫폼을 정렬해야합니다. 그것은 아무것도 지옥 지옥이라고하지 않습니다.

여러 버전을 한꺼번에 허용하는 경우 이는 바로 TBB.dll까지입니다. TBB의 버전과 코드를 정적으로 연결할 수는 있지만 그렇게 할 때 정적으로 링크 된 심볼이 동적으로 표시되지 않도록해야합니다 (컴파일러 컬렉션 종속 링커 옵션). TBB에 의존하는 코드는 아마도 maplink 로의 링크를 포함하는 별도의 링커 단계로 연결되어야합니다. 그리고 응용 프로그램은 TBB.dll에 다시 연결하지 않고 링크해야합니다.

적어도 리눅스에서는 so 개의 파일에서 작동 할 수 있습니다.

관련 문제