2016-07-13 3 views
0

У меня проблема. Когда я пытаюсь скомпилировать .so-библиотеку, все работает нормально.Странное поведение при компиляции тестов CppUTest для приложения с использованием Qt и Boost

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 не была одинаковой.

Возможно, у кого-то из вас есть такая проблема и вы знаете, что мы делаем неправильно.

ответ

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 или _LIBCPP_NEW, который предотвратит правильное включение <new>.

Возможно, вам придется скомпилировать один из файлов с ошибкой с таким флагом, как -save-temps, чтобы вы могли просмотреть предварительно обработанный вывод, чтобы посмотреть, какие файлы включены, и если их содержимое включено.

Вы также должны указать, что CMake является подробным, поэтому он печатает полные команды компилятора. Бесполезно скрывать детали компиляции, если компиляция терпит неудачу - вам нужно знать, что происходит!

+0

Я выяснил, что проблема здесь в версии cpputest framework. Спасибо за помощь! – Magnar

1

Наконец-то мы победили эту проблему. Проблема здесь заключалась в том, что, как полагают @Jonathan Wakely, cpputest определяет макрос _NEW, который предотвращает правильное включение new. Чтобы устранить проблему, мы переупорядочиваем включенные в нее все библиотеки, прежде чем включать заголовки cpputest.

+0

Это ошибка в cpputest. Идентификатор '_NEW' является [зарезервированным именем] (http://stackoverflow.com/q/228783/981959), поэтому библиотека, такая как cpputest, не должна ее использовать. –

+0

Я сообщу об этом на своем сайте. – Magnar