1

我正在尝试将 dmalloc 与 g++ 4.7 一起使用。

我收到的错误消息是:

/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?

4

2 回答 2

1

C 函数不会引发异常,但异常可以跨 C 函数帧传播。throw() 规范告诉编译器该函数不会产生异常,无论是由该函数生成还是由链下的某个其他函数生成。

在这种情况下,您正在编译一个 C++ 源代码,它恰好包含一个带有 C 链接的函数的外部声明。仅此一点就不允许编译器得出关于包含函数的库或用于实现该函数的语言的结论,因此编译器不能假设任何关于异常的事情,并且必须保守地编译代码,有 throw( ) 规范没有放在那里。

您必须更新和/或修补 dmalloc。

于 2012-11-12T17:04:27.337 回答
0

删除strdupfrom的声明dmalloc.h。它似乎在玩不再起作用的 C 库的把戏。

于 2012-11-12T17:15:19.630 回答