동적으로 연결되는 두 개의 "플러그인"(토론을 위해 소프트웨어 패키지에서 두 개의 서로 다른 응용 프로그램이라고 생각 함)이 있습니다. 내 라이브러리의 두 가지 별도 빌드 버전. 내 코드는 C++로 작성되었으며 일관된 네임 스페이스를 사용합니다. 때로는 각 응용 프로그램에 대해 두 개의 다른 버전을 만들어야합니다. 패키지의 두 응용 프로그램 (플러그인) 이 동시에로드 될 때이 문제가 발생하는 것으로 보입니다. 먼저이 오류가 발생하는 이유를 이해하는 데 도움이 필요합니다.동일한 이름의 DLL 또는 다른 구현 (코드)이있는 공유 라이브러리 객체 (so)에 연결된 두 개의 플러그인
예를 들어, 두 개의 별개이지만 동일하게 이름이 지정된 라이브러리, 예를 들어 mylib.so
(또는 DLL)이 있으며 각 응용 프로그램은 이들 중 하나에 연결됩니다. mylib.so
의 기본 코드가 동일하면 (즉, 네임 스페이스, 함수 이름 등이 약간 다른 구현을 사용하는 경우) 이로 인해 문제가 발생해야합니까? 라이브러리의 두 사본이 모호성이나 다른 링크 오류로 인해 발생할 수있는 문제를 피하기에 충분한 고유 한 위치에 있다는 사실이 아닙니까? 나는 분명히 생각하지 않는다. 그러나 나는 이것에 대한 전문가의 말을 듣고 싶다. 설명 위의 가정
무엇이 문제, 단지 예를 들어, mylib_v1.so
및 mylib_v2.so
은 모호성 오류에 대한 보호를 제공하는, 말하자면 어떤 버전 정보를 포함하는 라이브러리의 이름을 변경합니다 원인을한다 (기본 기능/네임 스페이스 이름은 여전히 동일한 것) ? 나는 아직도 생각하지 않는다. 그러나 나는 이번에 확실하지 않다. 내가 옳다고 가정하면 내 매크로에서 일부 매크로를 사용하여 네임 스페이스를 변경하여 네임 스페이스에 버전 정보를 포함 시키십시오 (예 : namespace mystuff {}
이 namespace mystuff_v1
으로 변경됨). 통찰력을 고맙게 여기십시오.
참고 : 놀랍게도 모호성은 Windows에서만 발생합니다! Linux는 문제없이 두 번째 단락의 상황을 처리 할 수 있습니다.