使用Qt和Boost为应用程序编译CppUTest测试时的奇怪行为
Weird behaviour when compiling CppUTest tests for application using Qt and Boost
我有以下问题。当我尝试编译 .so 库时,一切正常。
Scanning dependencies of target logger
[ 11%] Building CXX object CMakeFiles/logger.dir/src/defaultconfig.cpp.o
[ 22%] Building CXX object CMakeFiles/logger.dir/src/loggerstate.cpp.o
[ 33%] Building CXX object CMakeFiles/logger.dir/src/configmanager.cpp.o
[ 44%] Building CXX object CMakeFiles/logger.dir/src/configuration.cpp.o
[ 55%] Building CXX object CMakeFiles/logger.dir/src/formatter.cpp.o
[ 66%] Building CXX object CMakeFiles/logger.dir/src/levelmap.cpp.o
[ 77%] Building CXX object CMakeFiles/logger.dir/src/logger.cpp.o
[ 88%] Building CXX object CMakeFiles/logger.dir/src/logworker.cpp.o
[100%] Linking CXX shared library liblogger.so
[100%] Built target logger
当我尝试创建可执行文件时,例如使用例如logger.cpp
测试文件,我得到了一堵错误墙。完整日志在这里。然而,最有趣的事情是它在一台开发人员计算机上编译的。我们检查编译器版本,cmake版本,一切都是一样的。cpputest 版本不一样。
也许你们中的任何人都面临过这样的问题,并且知道我们做错了什么。
In file included from /opt/Qt5.3.2/5.3/gcc_64/include/QtCore/qobject.h:51:0,
from /opt/Qt5.3.2/5.3/gcc_64/include/QtCore/qabstractanimation.h:45,
from /opt/Qt5.3.2/5.3/gcc_64/include/QtCore/QtCore:4,
from /opt/Qt5.3.2/5.3/gcc_64/include/QtConcurrent/QtConcurrentDepends:2,
from /opt/Qt5.3.2/5.3/gcc_64/include/QtConcurrent/QtConcurrent:3,
from /tmp/Quantum/src/logger/include/logworker.h:5,
from /tmp/Quantum/src/logger/include/logger.h:5,
from /tmp/Quantum/src/logger/tests/logger_test.cpp:5:
/opt/Qt5.3.2/5.3/gcc_64/include/QtCore/qlist.h: In member function ‘void QList<T>::node_construct(QList<T>::Node*, const T&)’:
/opt/Qt5.3.2/5.3/gcc_64/include/QtCore/qlist.h:374:44: error: ‘n’ does not name a type
else if (QTypeInfo<T>::isComplex) new (n) T(t);
^
该错误似乎未包含<new>
标头。检查包含路径中的某处是否没有另一个名为"new"的文件,并检查没有其他标头定义宏(如 _NEW
或 _LIBCPP_NEW
)会阻止正确包含<new>
。
您可能需要使用标志(如 -save-temps
)编译其中一个失败的文件,以便检查预处理的输出,以查看包含哪些文件以及是否包含其内容。
您还应该告诉 CMake 要详细,以便它打印完整的编译器命令。如果编译失败,隐藏编译的详细信息是没有用的 - 你需要知道发生了什么!
最后我们克服了这个问题。正如Wakely所建议@Jonathan的那样,这里的问题是,cpputest
定义了宏_NEW
,从而阻止正确包含new
。为了解决这个问题,我们在包含标头之前重新排序包含cpputest
以包含所有库。
相关文章:
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 用于交叉编译和CMake的预处理器宏的单元测试
- MinGw 无法从 cmake 编译测试文件
- C++代码以测试另一个.cpp如果可以编译它
- 提升 1.64 单元测试编译失败
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 在Raspbian上编译pybind11测试用例时出现致命错误
- 如何让谷歌测试正常运行。测试总是失败。(它不会编译)
- 如何从测试脚本中运行WAF编译C++程序?
- 如何测试采用 std::initializer_list 的 ctor 具有编译时已知长度?
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 使用Mingw-w64编译Google测试
- Cmake无法在qt-creater/collect2上编译简单的测试程序:错误:ld
- Cxx测试编译,缺少主
- C++测试编译错误
- SDL测试编译期间出错
- 为什么谷歌测试编译,但不能看到我的项目来源
- Gtest:测试编译错误
- Boost 单元测试编译通过 Eclipse 失败