У меня возникла проблема при попытке использовать CPPUTest для проверки моей библиотеки.
Все было хорошо, пока я не включил библиотеку Eigen для обработки матрицы.
Когда я пытался собрать с g ++, библиотека Eigen продолжала выдавать ошибки:
/eigen3/Eigen/src/Core/util/Memory.h:270:41 ошибка: «ptr» не называет тип
/eigen3/Eigen/src/Core/CoreEvaluators.h:1655:12 ошибка: ожидаемый спецификатор типа перед «static_cast»
/eigen3/Eigen/src/Core/PlainOBjectBase.h:137:5 ошибка: объявление ‘оператора new’ как нефункционального
Если Eigen или CPPUTest работает отдельно, ошибка не выводится.
Я предполагаю, что в какой-то момент две библиотеки конфликтуют.
Действительно нужна помощь здесь. Большое спасибо.
Изменить 1:
Это мой Makefile:
CXX = g ++ -std = c ++ 0x -lstdc ++ CXXFLAGS = -g -Wall -static
-fprofile-arcs -ftest-охват -I./ -I $ (CPPUTEST_HOME) / include LDFLAGS = -L./ -L $ (CPPUTEST_HOME) / lib -lCppUTest -lCppUTestExt -pthread CPPUTEST_HOME = ./cpputest/workspace/FLAGS USR = -Я
/ usr / local / include / eigen3 TARGET = MyLibrary SRCS = MyLibrary.cpp
MyLibraryTest.cpp OBJS = $ (SRCS: .cpp = .o) все: $ (TARGET) $ (TARGET):
$ (OBJS) $ (CXX) -o $ @ $ ^ $ (CXXFLAGS) $ (LDFLAGS) $ (OBJS): $ (SRCS)
$ (CXX) -c $ (CXXFLAGS) $ ^% .o:% .cpp $ (CXX) -c $ (CXXFLAGS) $<
.ТЕЛЕФОН: clean clean: rm -f $ (TARGET) $ (OBJS) * .gcno * .gcov найти.
-название «.gcda «| xargs -r r
Похоже, что CppUTest определяет макрос new
:
https://github.com/cpputest/cpputest/blob/master/include/CppUTest/MemoryLeakDetectorNewMacros.h#L76
Когда я #include <Eigen/Core>
до #include <CppUTest/TestHarness.h>
Я не получаю сообщение об ошибке, которую вы сообщили (не проводил дальнейшее тестирование). Кроме того, вы можете #undef new
после включения CppUTest или определения CPPUTEST_MEM_LEAK_DETECTION_DISABLED
перед включением CppUTest (который, конечно, отключит обнаружение утечек).
В Eigen используется некорректная строка с использованием оператора размещения (то есть она не выделяет саму память), а ее синтаксис выбрасывает CppUTest new
макрос выключен.
Других решений пока нет …