2016-07-13 5 views
0

私は次の問題を抱えています。 .soライブラリをコンパイルしようとすると、すべて正常に動作します。QtとBoostを使ってアプリケーションのCppTestテストをコンパイルするときの奇妙な動作

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。しかし、それは1つの開発者のコ​​ンピュータでコンパイルする最も面白いものです。私たちはコンパイラのバージョン、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」という別のファイルがないことを確認し、他のヘッダが_NEWまたは_LIBCPP_NEWのようなマクロを定義していないことを確認して、<new>が正しく含まれないようにしてください。

-save-tempsのようなフラグを付けて失敗したファイルの1つをコンパイルする必要があるため、前処理された出力を調べて、どのファイルが含まれているか、その内容が含まれているかどうかを調べることができます。

また、CMakeに冗長であるように指示して、完全なコンパイラコマンドを出力する必要があります。コンパイルに失敗した場合は、コンパイルの詳細を隠すことは無駄です。何が起こっているのかを知る必要があります。

+0

ここで問題がcpputestフレームワークのバージョンであることがわかりました。手伝ってくれてありがとう! – Magnar

1

最後に、この問題を解決しました。ここでの問題は、@ Zonathan Wakelyが示唆しているように、cpputestは、newが正しく組み込まれないようにするマクロ_NEWを定義しています。この問題を解決するために、インクルードに、すべてのライブラリをインクルードするように並べ替えてから、cpputestヘッダーを追加します。

+0

これはcpputestのバグです。識別子 '_NEW'は[予約名](http://stackoverflow.com/q/228783/981959)ですので、cpputestのようなライブラリはそれを使用してはいけません。 –

+0

私は彼らのサイトでこれを報告します。 – Magnar

関連する問題