Ich arbeite normalerweise an Ubuntu, mit CMake und nativer Umgebung. Mein Projekt kompiliert und läuft gut. Jetzt bin ich auf OSX und vor allem erhalte ich einige Warnungen, wenn QCustomPlot Kompilieren:Wie kompiliere ich QCustomPlot für 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;
Ich nehme ich diese Warnung unterdrücken kann. Ich mag es jedoch nicht, Warnungen zu unterdrücken, wenn sie eine echte Gefahr bedeuten können. (unter Ubuntu gibt es keine Warnung). Warum ist es eine Warnung? Ich denke, eine virtuelle Funktion zu überschreiben ist nicht wirklich ungewöhnlich oder gefährlich.
Jedenfalls mit Warnungen, aber dompiles. Das eigentliche Problem scheint mit Verknüpfung
[ 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
Was ist das Problem hier? (Als eine Multi-Plattform-Entwicklungsumgebung verwenden, ich habe nicht erwartet, jede fehlende Datei, Komponente oder ähnliches Problem.)
Edit: hier geht die CMake-Datei, die es
produzierteset(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>
)
Ich würde wirklich froh sein, wenn vorher/nachher/in/addition_to downvoting, würden Sie einen Kommentar hinterlassen, warum. – katang
Ich habe nicht downvote, aber ich denke, dass Sie mehr Details über den Fehler angeben sollten: Führen Sie "make VERBOSE = 1" statt "make" aus, um zu sehen, welche Bibliotheken verknüpft sind. Suchen Sie insbesondere nach Qt5Core, das der sein sollte, der qt_assert_x enthält. Kannst du etwas erfolgreich mit qmake bauen? Zum Beispiel die QCustomPlot Beispiele? Die Warnung ist nichts, worüber man sich Sorgen machen muss; Es wird vorgeschlagen, den Überschreibungsspezifizierer zu verwenden, der in C++ 11 eingeführt wurde. Aber ich denke, QCustomPlot hält Kompatibilität mit älterem C++. Wenn Sie C++ 11 nicht benötigen, sollte 'set (CMAKE_CXX_STANDARD 98)' die Warnung entfernen. – pepan