2016-12-28 125 views
1

我在尝试使用CPPUTest来测试我的库时遇到问题。特征与CPPUTest?

一切都很好,直到我包括Eigen库来处理矩阵处理。 当我试图建立与G ++,征库保持引发错误:

  • /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错误:声明'operator new'为无功能

如果Eigen或CPPUTest单独运行,则不会输出错误。

我的猜测是两个库在某些时候有冲突。

真的需要一些帮助。十分感谢。

编辑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

我可以看到用于构建触发这些错误的.c​​pp文件的命令行吗? –

回答

0

看来,CppUTest定义一个宏newhttps://github.com/cpputest/cpputest/blob/master/include/CppUTest/MemoryLeakDetectorNewMacros.h#L76

当我#include <Eigen/Core>以前#include <CppUTest/TestHarness.h>,我没有得到错误你报告(尽管没有进一步的测试)。或者,您可以在包含CppUTest之后包含#undef new,或者在包含CppUTest之前定义CPPUTEST_MEM_LEAK_DETECTION_DISABLED(这当然会禁用泄漏检测)。

Eigen中的违规行使用placement-new操作符(即它本身不分配内存),它的语法是将CppUTest的new宏关闭。