c++ - 使用 Qt 和 Boost 为应用程序编译 CppUTest 测试时的奇怪行为

标签 c++ qt boost cpputest

我有以下问题。当我尝试编译 .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 的可执行文件时。测试文件我得到了很多错误。 Full log is here .然而,最有趣的是它在开发人员的计算机上编译。我们检查编译器版本、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> header 未包含在内。检查包含路径中某处是否没有另一个名为“new”的文件,并检查是否没有其他 header 定义了类似 _NEW 的宏。或 _LIBCPP_NEW这会阻止 <new>从被正确包含。<​​/p>

您可能需要使用诸如 -save-temps 之类的标志来编译其中一个失败的文件因此您可以检查预处理的输出,查看包含了哪些文件,以及它们的内容是否包含在内。

您还应该告诉 CMake 详细,以便它打印完整的编译器命令。如果编译失败,隐藏编译细节是没有用的——你需要知道发生了什么!

关于c++ - 使用 Qt 和 Boost 为应用程序编译 CppUTest 测试时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348949/

相关文章:

c++ - 用于数据传输的标准字节通信协议(protocol)

c++ - Linux C++ Qt 修复 "QIODevice::write: ReadOnly device"?

python - 如何在 boost-numpy 库中使用 boost::numpy::from_data

c++ - 退出前等待插槽执行

c++ - Qt 中的 Mac OS X 链接器错误; CoreGraphics 和 CGWindowListCreate

c++ - 不依赖于系统时间的时间

boost - 2> LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc120-mt-sgd-1_58.lib'

c++ - 通过查找位返回一个数组?

c++ - 在 bitset 中随机选择 set bit 位置的最佳 C++ 方法

可变参数模板扩展期间的 C++ 类型索引