CPPUTest 的本征?
Eigen with CPPUTest?
我在尝试使用 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 错误:将 '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 $@ $^ $(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
CppUTest 似乎定义了一个宏new
:
https://github.com/cpputest/cpputest/blob/master/include/CppUTest/MemoryLeakDetectorNewMacros.h#L76
当我在 #include <CppUTest/TestHarness.h>
之前 #include <Eigen/Core>
时,我没有收到您报告的错误(虽然没有进一步测试)。或者,您可以在包含 CppUTest 之后 #undef new
或在包含 CppUTest 之前定义 CPPUTEST_MEM_LEAK_DETECTION_DISABLED
(这当然会禁用泄漏检测)。
Eigen 中有问题的行使用了 placement-new 运算符(即,它本身不分配内存),它的语法使 CppUTest 的 new
宏关闭。
我在尝试使用 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 错误:将 '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 $@ $^ $(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
CppUTest 似乎定义了一个宏new
:
https://github.com/cpputest/cpputest/blob/master/include/CppUTest/MemoryLeakDetectorNewMacros.h#L76
当我在 #include <CppUTest/TestHarness.h>
之前 #include <Eigen/Core>
时,我没有收到您报告的错误(虽然没有进一步测试)。或者,您可以在包含 CppUTest 之后 #undef new
或在包含 CppUTest 之前定义 CPPUTEST_MEM_LEAK_DETECTION_DISABLED
(这当然会禁用泄漏检测)。
Eigen 中有问题的行使用了 placement-new 运算符(即,它本身不分配内存),它的语法使 CppUTest 的 new
宏关闭。