Я пытаюсь использовать 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 ()'
…или я должен как-то исправить патч dmalloc?
Функции C не генерируют исключения, но исключения могут распространяться по фреймам C-функции. Спецификация throw () сообщает компилятору, что из этой функции не может возникнуть исключение, независимо от того, сгенерировано ли оно функцией или сгенерировано какой-либо другой функцией в цепочке.
В этом случае вы компилируете исходный код C ++, который содержит внешнее объявление функции со связью C. Одно это не позволяет компилятору делать выводы ни о библиотеке, которая содержит функцию, ни о языке, используемом для реализации этой функции, таким образом, компилятор не может предполагать что-либо об исключениях и должен консервативно компилировать код, если бы выполнялся бросок ( ) Спецификация там не ставилась.
Вы должны обновить и / или патч dmalloc.
Удалить объявление strdup
от dmalloc.h
, Кажется, что с трюками с библиотекой С больше не работает.