2010-03-24 4 views
3

VC6으로 컴파일 된 오래된 C++ 프로젝트가 있습니다.VC6 연결 충돌

새로운 기능을 구현하기 위해 정적으로 새 라이브러리를 연결해야합니다.

새 라이브러리는 이전에 링크 된 정적 라이브러리에 이미 정의 된 심볼 (즉 _inflate)을 정의합니다.

물론 어느 라이브러리도 제거 할 수 없으며 물론 라이브러리의 소스 코드에 액세스 할 수 없습니다.

링커 오류 (LNK2005)를 피할 수있는 방법이 있습니까?

답변

3

_inflate의 두 버전이 동일하거나 적어도 "호환 가능"하다는 것을 알고 있다면 /FORCE:Multiple linker option을 사용하여 강제로 이름 충돌을 무시할 수 있습니다.

물론 어떤 식 으로든 "호환되지 않는"코드의 버전에 연결하면 정의되지 않은 동작이 발생할 수 있습니다.

+0

글쎄, 나는 컴파일 할 수 있었다. 그러나 _inflate 구현에 대한 확신이 없기 때문에 다른 해결책을 찾아야한다. (어쩌면이 둘 중 하나를 dinamically 연결). 덕분에 – Stefano

+1

가장 쉬운 방법은 링크를 강제로 누른 다음 프로그램을 테스트하는 것입니다. 프로그램이 직접적으로 또는 간접적으로 _inflate를 호출하지 않으면 결코 문제가되지 않습니다. _inflate가 호출되었지만 구현이 충분히 유사하다면 (또는 다른 프로그램 상태에 영향을 미치지 않는 경우) 바람직하지 않은 영향을 미치지 않을 수도 있습니다. 종종 다른 lib에 두 개의 동일한 구현이 있습니다. 그것이 호출되고 "호환되지 않는"경우에는 대용량의 명백한 오류가 발생합니다. 그래서 시도해 볼 것이고, 테스트에서 모두 정상적으로 작동한다면, 당신은 아마도 실행 가능한 솔루션을 가지고있을 것입니다. –