2016-12-28 10 views
1

У меня возникла проблема при попытке использовать CPPUTest для тестирования моей библиотеки.Eigen с CPPUTest?

Все было нормально, пока я не включил Eigen library для обработки матричной обработки. Когда я пытался построить с г ++, библиотека Эйгена хранится бросание ошибки:

  • /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 ошибка: объявление оператора «новый» как недействительный

Если Eigen или CPPUTest работает отдельно, ошибка не выводится.

Мое предположение, что в обеих библиотеках есть конфликты в какой-то момент.

Настоятельно вам нужно помочь. Большое спасибо.

Edit 1: Это мой Makefile:

CXX = g++ -std=c++0x -lstdc++ CXXFLAGS = -g -Wall -static -fprofile-arcs -ftest-coverage -I./ -I$(CPPUTEST_HOME)/include LDFLAGS = -L./ -L$(CPPUTEST_HOME)/lib -lCppUTest -lCppUTestExt -pthread CPPUTEST_HOME = ./cpputest/workspace/install USER_CFLAGS = -I /usr/local/include/eigen3 TARGET = MyLibrary SRCS = MyLibrary.cpp MyLibraryTest.cpp OBJS = $(SRCS:.cpp=.o) all: $(TARGET) $(TARGET): $(OBJS) $(CXX) -o [email protected] $^ $(CXXFLAGS) $(LDFLAGS) $(OBJS): $(SRCS) $(CXX) -c $(CXXFLAGS) $^ %.o: %.cpp $(CXX) -c $(CXXFLAGS) $<
.PHONY: clean clean: rm -f $(TARGET) $(OBJS) *.gcno *.gcov ~ find . -name ".gcda" | xargs -r r

+0

Можете ли вы указать, какую версию Eigen и CPPUTest вы используете? Полностью [mcve] также будет полезен ... –

+0

Я использую последние версии обеих библиотек: Eigen 3.3.1 и CPPUTest 3.8 – Cuder

+0

Могу ли я увидеть командную строку, используемую для сборки .cpp-файла, который вызвал эти ошибки? –

ответ

0

Оказывается, что 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.