2012-11-12 2 views
1

g ++ 4.7에서 dmalloc을 사용하려고합니다.최근 g ++에서 dmalloc 사용

내가 무엇입니까 오류 메시지는 다음과 같습니다

/usr/include/dmalloc.h:457:32: error: declaration of 'char* strdup(const char*)' has a different exception specifier 
/usr/include/string.h:130:14: error: from previous declaration 'char* strdup(const char*) throw()' 
  1. 왜 C 함수가 예외를 던질 수 있습니까?
  2. 나는 어떻게 든 컴파일 타임에 throw() 지정자를 무시하도록 컴파일러에 지시 할 수 있습니까?

... 또는 어떻게해야합니까 dmalloc을 패치합니까?

+3

C 프로그램이 아닌 C++로 프로그램을 컴파일하고 있습니다. –

+0

나는 코멘트를 이해하지 못한다. 예, C++ 프로그램이지만 strdup은 libc의 함수입니다. – arved

+0

그리고 g ++을 사용하여 컴파일 할 때 libc에서 함수를 결정 했습니까? –

답변

1

C 함수는 예외를 throw하지 않지만 예외는 C 함수 프레임을 통해 전파 할 수 있습니다. throw() 스펙은 컴파일러에게 함수에 의해 생성 되든 체인을 통해 다른 함수에 의해 생성 되든이 함수에서 예외가 나올 수 없다는 것을 알려줍니다.

이 경우에는 C 링크가있는 함수의 외부 선언이 포함 된 C++ 소스를 컴파일하고 있습니다. 이것만으로는 컴파일러가 함수를 포함하는 라이브러리 나 그 함수를 구현하는 데 사용 된 언어에 대한 결론을 이끌어 내지 못하기 때문에 컴파일러는 예외에 대해 아무 것도 가정 할 수 없으며 코드를 보수적으로 컴파일해야합니다.) spec은 거기에 놓이지 않았다.

dmalloc을 업데이트하거나 패치해야합니다.

0

strdup의 선언을 dmalloc.h에서 제거하십시오. 더 이상 작동하지 않는 C 라이브러리로 트릭을하는 것처럼 보입니다.

관련 문제