매우 큰 프로젝트를 빌드하는 데 MSVC++ 6을 사용하고 있습니다. 이 프로젝트의 소스 파일 중 일부는 우리가 응용 프로그램을 유지 관리하는 데 사용하는 작은 유틸리티와 공유됩니다. 이전에는이 작은 유틸리티가 기본 응용 프로그램의 여러 libs에 연결되어야하고 런타임에 기본 응용 프로그램의 DLL도 필요했습니다. 이러한 종속성을 제거하는 임무를 맡았는데, 매우 간단하게 들렸습니다 ... 불행히도 기본 응용 프로그램에 사용되는 미리 컴파일 된 헤더로 인해 많은 문제가 발생했습니다.미리 컴파일 된 헤더를 사용하는 프로젝트에서 일부 파일의 종속성을 재구성하면 링커 오류가 발생합니다.
필자는 먼저 유틸리티의 모든 파일을 명시 적으로 수정하여 필요한 모든 것을 명시한 다음 PCH (유틸리티에 대한 불필요한 종속성의 95 %가 제거 된)에 대한 #include 지시문을 제거했습니다. 이 유틸리티를 컴파일하는 데 좋습니다. 그러나 이제는 주 앱을 컴파일하면 미리 컴파일 된 헤더 지시문이 누락되었다는 오류가 발생합니다. 나는 위대하다고 생각했다. 조건부로 PCH를 포함 할 것이다. 이것은 작동하지 않는 것 같아요 ... 난 "예기치 않은 #endif", here 언급 한 얻을. 내 다음 생각은 유틸리티와 기본 앱간에 공유되는 세 개의 소스 파일에 대한 주 앱에서 PCH를 사용 중지하는 것이 었습니다. 이 성공적으로 컴파일하지만 나는 연결하는 동안 다음과 같이 오류의 무리를 얻을 :
tls7d.lib(tls707d.dll) : error LNK2005: "public: unsigned int __thiscall RWCString::length(void)const " ([email protected]@@QBEIXZ) already defined in stripledescypher.obj
AFAICT, 곱하기 정의 기호 모두 내가 명시 적으로 PCH의 필요성을 피하기 위해 공유 파일에 포함 것들을 . 내 직감은 그 3 개의 파일을 PCH .cpp 파일과 동일한 DLL에 연결하기 때문에 여러 위치에서 컴파일된다는 것입니다. 이 혼란에서 벗어날 방법이 있습니까? 나는 무엇이든 시도해 볼 것입니다 ...