2012-01-24 2 views
2

여러 개의 다중 정의 오류 질문이 여기에 있음을 이해하지만이 문제로 어려움을 겪고 있습니다.최적화 수준의 C++ 다중 정의 링커 오류

저는 개발중인 모듈이 있고 디버그에 빌드했습니다. 즉 -DDEBUG -g -O0입니다. 지금은 내가 빌드 릴리스 -DNDEBUG -Os을 만들고 싶어 내가

  • 표준 : basic_ios> :: basic_ios()
  • 표준 : __ throw_bad_alloc 등 여러 STL 정의의 여러 정의에 대한 링커 오류를 얻을()
  • 표준 : : 문자열 : 할당 (숯불 CONST *) V
  • 등등
  • 내 프로젝트의 모든 헤더 파일이 #ifndef 가드를 가지고 헤더 파일에있는 유일한 코드는 인라인 선언을 확인했다

.

주위를 어지럽 혀서 -DNDEBUG -O0으로 컴파일 할 수 있지만 어떤 최적화 수준에서는 컴파일 할 수 없습니다. 빌드 프로세스에는 약 2 개의 오브젝트를 빌드 한 다음이를 서로 링크하는 작업이 포함됩니다. 왜 최적화가 링커를 죽일까요? 이 문제를 어떻게 해결할 수 있습니까?

TDM으로 작성 MinGW 4.6.1.

답변

0

또한이 문제는 MFC 디버그 파일을 릴리스 모드에 포함 할 때 또는 그 반대의 경우에도 복제됩니다. 같은 문제가 될 수 있습니다 - 이것은 단지 야생 추측입니다.

는 다음을 수행, 내가 추측하고있어 원인 해결하려면

#ifdef _DEBUG 
#define DEBUG_WAS_DEFINED 
//include files that give you multiple definitions here 
#endif 

//..... 
//..... 
//rest of code/includes 

#ifdef DEBUG_WAS_DEFINED 
#undef DEBUG_WAS_DEFINED 
#define _DEBUG //revert to previous state 
#endif 
당신은이 링크에서 살펴 봐야 할 수 있습니다

: http://www.flounder.com/debug_release.htm, 혼합 DLL의에 대한 섹션.

+0

마찬가지로 나는 문제 파일이 무엇인지 찾을 수없는 질문에 말했다. 어떤 파일이 문제가있는 아동인지 파악하는 데 도움이됩니까? –

+0

@AndrewRedd에 MFC 헤더가 포함되어 있습니까? 물론 소스를 찾을 때까지 파일을 제거하려고 할 수 있습니다. –

+0

나는 혼합 dll 문제가 이것과 관련이 없다고 생각하지 않습니다. 깨끗한 상태에서 완전히 빌드하고 디버그와 릴리스를 섞지 않습니다. –