0

我有以下问题。当我尝试编译 .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 版本不一样。

也许你们中的任何人都面临过这样的问题并且知道我们做错了什么。

4

2 回答 2

2
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 是冗长的,因此它会打印完整的编译器命令。如果编译失败,隐藏编译的细节是没有用的——你需要知道发生了什么!

于 2016-07-13T10:26:56.753 回答
1

最后我们解决了这个问题。正如@Jonathan Wakely 所建议的那样,这里的问题是定义了阻止正确包含的cpputest宏。为了解决这个问题,我们重新排序包含以在包含标头之前包含所有库。_NEWnewcpputest

于 2016-07-13T13:57:27.970 回答