私は通常、CMakeとネイティブ環境を使用してUbuntuで作業しています。私のプロジェクトはコンパイルされて正常に動作します。今、私はOSXに変更し、QCustomPlotをコンパイルするときに最初にすべての私はいくつかの警告を受ける:QCustomPlot for OSXをコンパイルするには?
QCustomPlot/include/qcustomplot.h:6007:15: warning:
'findEnd' overrides a member function but is not marked 'override'
[-Winconsistent-missing-override]
virtual int findEnd(double sortKey, bool expandedRange=true) const;
^
../QCustomPlot/include/qcustomplot.h:3830:15: note:
overridden virtual function is here
virtual int findEnd(double sortKey, bool expandedRange=true) const = 0;
私はこの警告を抑制することができると仮定します。しかし、本当の危険を意味する可能性がある場合は、警告を抑止するのが嫌いです。 (Ubuntuの下では、警告はありません)。 なぜ警告ですか?私は、仮想関数をオーバーライドすることは、本当に珍しいことでも危険でもないと思います。
とにかく、警告はありますが、dompiles。リンクに実際の問題が表示される
[ 4%] Building CXX object QCustomPlot/CMakeFiles/libQCustomPlot.dir/libQCustomPlot_automoc.cpp.o
[ 5%] Linking CXX shared library libQCustomPlot.dylib
Undefined symbols for architecture x86_64:
"qt_assert_x(char const*, char const*, char const*, int)", referenced from:
QList<QCPDataRange>::at(int) const in qcustomplot.cpp.o
QList<QCPDataRange>::operator[](int) in qcustomplot.cpp.o
ここで問題は何ですか? (マルチプラットフォーム開発環境を使用して、私が欠落しているファイル、コンポーネント、または同様の問題を期待していなかった。)
編集:ここでは、それを生成しCMakeのファイルがCMakeLists.txtが欠落している
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5 COMPONENTS Core Widgets PrintSupport REQUIRED)
include_directories(
${Qt5Widgets_INCLUDE_DIRS}
${Qt5Printer_INCLUDE_DIRS}
include
)
add_definitions(${Qt5Widgets_DEFINITIONS} ${Qt5Printer_DEFINITIONS})
QT5_WRAP_CPP(qcustomplot_moc include/qcustomplot.h)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS} -std=c++11 -Wall")
ADD_LIBRARY(libQCustomPlot
qcustomplot.cpp
${qcustomplot_moc} # The MOC headers, generated
)
set_target_properties(libQCustomPlot
PROPERTIES OUTPUT_NAME QCustomPlot
)
target_include_directories(libQCustomPlot PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
前/後/代わりに/代わりにin_addition_to downvotingがあれば、私は本当にうれしいでしょう。 – katang
私はdownvoteしませんでしたが、私はあなたがエラーの詳細を提供すべきだと思います: "make VERBOSE = 1"を実行して、どのライブラリがリンクされているかを確認してください。特にqt_assert_xを含むQt5Coreを探してください。 qmakeを使って何かを構築することはできますか?たとえば、QCustomPlotの例ですか?警告は心配するものではありません。 C++ 11で導入されたオーバーライド指定子の使用を提案しています。しかし、QCustomPlotは古いC++との互換性を保つと思います。 C++ 11が必要ない場合、 'set(CMAKE_CXX_STANDARD 98)'は警告を削除するはずです。 – pepan