$ git clone git@github.com:yse/easy_profiler.git
$ cd easy_profiler
$ git branch
* develop
$ git rev-parse --short HEAD
cc0e154
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE="Release" ..
-- The CXX compiler identification is GNU 15.1.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
--
-- EASY_PROFILER.Core version = 2.1.0
--
-- -------- EASY_PROFILER OPTIONS: --------
-- Use rtdsc as a timer
-- Default listening port = 28077
-- Auto-start listening = OFF
-- Profile self = OFF
-- Profile self blocks initial status = OFF
-- Truncate block dynamic names = OFF (may cause crash if using dynamic block names of length >2816 symbols)
-- Check maximum EASY_VALUE data size = OFF (may cause crash if using EASY_VALUE arrays of total data size >2816 bytes)
-- Implicit thread registration = ON
-- Log messages = OFF
-- Function names pretty-print = OFF
-- Use EasyProfiler colors palette = ON
-- Shared library: ON
-- ------ END EASY_PROFILER OPTIONS -------
--
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE
-- Found OpenGL: /usr/lib/libOpenGL.so
-- Found WrapOpenGL: TRUE
-- Found WrapVulkanHeaders: /usr/include
-- Using Qt v6.10.0
-- Configuring done (0.3s)
-- Generating done (0.0s)
-- Build files have been written to: /home/garm/projects/easy_profiler/build
$ make
[ 1%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/base_block_descriptor.cpp.o
[ 3%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/block.cpp.o
[ 5%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/block_descriptor.cpp.o
[ 7%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/easy_socket.cpp.o
[ 8%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/event_trace_win.cpp.o
[ 10%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/nonscoped_block.cpp.o
[ 12%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/profile_manager.cpp.o
[ 14%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/profiler.cpp.o
[ 16%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/reader.cpp.o
[ 17%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/serialized_block.cpp.o
[ 19%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/thread_storage.cpp.o
[ 21%] Building CXX object easy_profiler_core/CMakeFiles/easy_profiler.dir/writer.cpp.o
[ 23%] Linking CXX shared library ../bin/libeasy_profiler.so
[ 23%] Built target easy_profiler
[ 23%] Built target profiler_gui_autogen_timestamp_deps
[ 25%] Automatic MOC for target profiler_gui
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
AutoMoc: /usr/lib/qt6/moc: /usr/lib/qt6/../libpcre2-16.so.0: no version information available (required by /usr/lib/qt6/moc)
[ 25%] Built target profiler_gui_autogen
[ 26%] Automatic RCC for resources.qrc
[ 28%] Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/profiler_gui_autogen/mocs_compilation.cpp.o
[ 30%] Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/main.cpp.o
[ 32%] Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_inspector.cpp.o
[ 33%] Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/arbitrary_value_tooltip.cpp.o
[ 35%] Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/blocks_graphics_view.cpp.o
/home/garm/projects/easy_profiler/profiler_gui/blocks_graphics_view.cpp: In member function ‘virtual void ThreadNamesWidget::mousePressEvent(QMouseEvent*)’:
/home/garm/projects/easy_profiler/profiler_gui/blocks_graphics_view.cpp:3289:159: warning: ‘QMouseEvent::QMouseEvent(QEvent::Type, const QPointF&, Qt::MouseButton, Qt::MouseButtons, Qt::KeyboardModifiers, const QPointingDevice*)’ is deprecated: Use another constructor [-Wdeprecated-declarations]
3289 | ) - QPointF(sceneRect().width(), 0), _event->button(), _event->buttons() & ~Qt::RightButton, _event->modifiers());
| ^
In file included from /usr/include/qt6/QtGui/QKeyEvent:1,
from /home/garm/projects/easy_profiler/profiler_gui/blocks_graphics_view.cpp:75:
/usr/include/qt6/QtGui/qevent.h:202:5: note: declared here
202 | QMouseEvent(Type type, const QPointF &localPos, Qt::MouseButton button,
| ^~~~~~~~~~~
/home/garm/projects/easy_profiler/profiler_gui/blocks_graphics_view.cpp: In member function ‘virtual void ThreadNamesWidget::mouseReleaseEvent(QMouseEvent*)’:
/home/garm/projects/easy_profiler/profiler_gui/blocks_graphics_view.cpp:3328:159: warning: ‘QMouseEvent::QMouseEvent(QEvent::Type, const QPointF&, Qt::MouseButton, Qt::MouseButtons, Qt::KeyboardModifiers, const QPointingDevice*)’ is deprecated: Use another constructor [-Wdeprecated-declarations]
3328 | ) - QPointF(sceneRect().width(), 0), _event->button(), _event->buttons() & ~Qt::RightButton, _event->modifiers());
| ^
/usr/include/qt6/QtGui/qevent.h:202:5: note: declared here
202 | QMouseEvent(Type type, const QPointF &localPos, Qt::MouseButton button,
| ^~~~~~~~~~~
/home/garm/projects/easy_profiler/profiler_gui/blocks_graphics_view.cpp: In member function ‘virtual void ThreadNamesWidget::mouseMoveEvent(QMouseEvent*)’:
/home/garm/projects/easy_profiler/profiler_gui/blocks_graphics_view.cpp:3337:159: warning: ‘QMouseEvent::QMouseEvent(QEvent::Type, const QPointF&, Qt::MouseButton, Qt::MouseButtons, Qt::KeyboardModifiers, const QPointingDevice*)’ is deprecated: Use another constructor [-Wdeprecated-declarations]
3337 | ) - QPointF(sceneRect().width(), 0), _event->button(), _event->buttons() & ~Qt::RightButton, _event->modifiers());
| ^
/usr/include/qt6/QtGui/qevent.h:202:5: note: declared here
202 | QMouseEvent(Type type, const QPointF &localPos, Qt::MouseButton button,
| ^~~~~~~~~~~
[ 37%] Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/blocks_tree_widget.cpp.o
[ 39%] Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/bookmarks_editor.cpp.o
[ 41%] Building CXX object profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o
/home/garm/projects/easy_profiler/profiler_gui/common_functions.cpp: In function ‘QString arrayToString(const profiler::ArbitraryValue&, int)’:
/home/garm/projects/easy_profiler/profiler_gui/common_functions.cpp:97:101: error: no matching function for call to ‘QChar::QChar(profiler::Value<profiler::DataType::Int8, true>::value_type)’
97 | case profiler::DataType::Int8: return QChar(_serializedValue.toArray<int8_t>()->at(_index));
| ^
/home/garm/projects/easy_profiler/profiler_gui/common_functions.cpp:97:101: note: there are 8 candidates
In file included from /usr/include/qt6/QtCore/qstring.h:15,
from /usr/include/qt6/QtCore/qhashfunctions.h:9,
from /usr/include/qt6/QtCore/qlist.h:11,
from /home/garm/projects/easy_profiler/profiler_gui/common_functions.cpp:56:
/usr/include/qt6/QtCore/qchar.h:149:43: note: candidate 1: ‘template<class Char, typename std::enable_if<std::is_same<Char, unsigned char>::value, bool>::type <anonymous> > constexpr QChar::QChar(Char)’
149 | QT_ASCII_CAST_WARN constexpr explicit QChar(const Char c) noexcept : ucs(c) { }
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:149:43: note: template argument deduction/substitution failed:
/usr/include/qt6/QtCore/qchar.h:148:66: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
148 | template <typename Char, if_explicit_ascii_warn_char<Char> = true>
| ^~~~
/usr/include/qt6/QtCore/qchar.h:143:45: note: candidate 2: ‘template<class Char, typename std::enable_if<std::is_same<Char, char>::value, bool>::type <anonymous> > constexpr QChar::QChar(Char)’
143 | QT_ASCII_CAST_WARN constexpr Q_IMPLICIT QChar(const Char ch) noexcept : ucs(uchar(ch)) {}
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:143:45: note: template argument deduction/substitution failed:
/usr/include/qt6/QtCore/qchar.h:142:66: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
142 | template <typename Char, if_implicit_ascii_warn_char<Char> = true>
| ^~~~
/usr/include/qt6/QtCore/qchar.h:134:24: note: candidate 3: ‘template<class Char, typename std::enable_if<std::disjunction<std::is_same<Char, char32_t>, std::conjunction<std::is_same<Char, wchar_t>, std::integral_constant<bool, true> >, std::is_same<Char, int>, std::is_same<Char, unsigned int> >::value, bool>::type <anonymous> > constexpr QChar::QChar(Char)’
134 | constexpr explicit QChar(const Char ch) noexcept
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:134:24: note: template argument deduction/substitution failed:
/usr/include/qt6/QtCore/qchar.h:133:66: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
133 | template <typename Char, if_explicit_conversion_char<Char> = true>
| ^~~~
/usr/include/qt6/QtCore/qchar.h:132:26: note: candidate 4: ‘template<class Char, typename std::enable_if<std::disjunction<std::is_same<Char, short unsigned int>, std::is_same<Char, short int>, std::is_same<Char, QChar::SpecialCharacter>, std::is_same<Char, QLatin1Char>, std::conjunction<std::is_same<Char, wchar_t>, std::negation<std::integral_constant<bool, true> > >, std::is_same<Char, char16_t> >::value, bool>::type <anonymous> > constexpr QChar::QChar(Char)’
132 | constexpr Q_IMPLICIT QChar(const Char ch) noexcept : ucs(char16_t(ch)) {}
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:132:26: note: template argument deduction/substitution failed:
/usr/include/qt6/QtCore/qchar.h:131:66: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
131 | template <typename Char, if_implicit_conversion_char<Char> = true>
| ^~~~
/usr/include/qt6/QtCore/qchar.h:119:24: note: candidate 5: ‘constexpr QChar::QChar(uchar, uchar)’
119 | constexpr explicit QChar(uchar c, uchar r) noexcept : ucs(char16_t((r << 8) | c)) {}
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:119:24: note: candidate expects 2 arguments, 1 provided
/usr/include/qt6/QtCore/qchar.h:115:26: note: candidate 6: ‘constexpr QChar::QChar()’
115 | constexpr Q_IMPLICIT QChar() noexcept : ucs(0) {}
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:115:26: note: candidate expects 0 arguments, 1 provided
/usr/include/qt6/QtCore/qchar.h:48:31: note: candidate 7: ‘constexpr QChar::QChar(const QChar&)’
48 | class QT6_ONLY(Q_CORE_EXPORT) QChar {
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:48:31: note: no known conversion for argument 1 from ‘profiler::Value<profiler::DataType::Int8, true>::value_type’ {aka ‘signed char’} to ‘const QChar&’
/usr/include/qt6/QtCore/qchar.h:48:31: note: candidate 8: ‘constexpr QChar::QChar(QChar&&)’
/usr/include/qt6/QtCore/qchar.h:48:31: note: no known conversion for argument 1 from ‘profiler::Value<profiler::DataType::Int8, true>::value_type’ {aka ‘signed char’} to ‘QChar&&’
/home/garm/projects/easy_profiler/profiler_gui/common_functions.cpp: In function ‘QString singleValueToString(const profiler::ArbitraryValue&)’:
/home/garm/projects/easy_profiler/profiler_gui/common_functions.cpp:118:98: error: no matching function for call to ‘QChar::QChar(profiler::Value<profiler::DataType::Int8, false>::value_type)’
118 | case profiler::DataType::Int8: return QChar(_serializedValue.toValue<int8_t>()->value());
| ^
/home/garm/projects/easy_profiler/profiler_gui/common_functions.cpp:118:98: note: there are 8 candidates
/usr/include/qt6/QtCore/qchar.h:149:43: note: candidate 1: ‘template<class Char, typename std::enable_if<std::is_same<Char, unsigned char>::value, bool>::type <anonymous> > constexpr QChar::QChar(Char)’
149 | QT_ASCII_CAST_WARN constexpr explicit QChar(const Char c) noexcept : ucs(c) { }
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:149:43: note: template argument deduction/substitution failed:
/usr/include/qt6/QtCore/qchar.h:148:66: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
148 | template <typename Char, if_explicit_ascii_warn_char<Char> = true>
| ^~~~
/usr/include/qt6/QtCore/qchar.h:143:45: note: candidate 2: ‘template<class Char, typename std::enable_if<std::is_same<Char, char>::value, bool>::type <anonymous> > constexpr QChar::QChar(Char)’
143 | QT_ASCII_CAST_WARN constexpr Q_IMPLICIT QChar(const Char ch) noexcept : ucs(uchar(ch)) {}
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:143:45: note: template argument deduction/substitution failed:
/usr/include/qt6/QtCore/qchar.h:142:66: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
142 | template <typename Char, if_implicit_ascii_warn_char<Char> = true>
| ^~~~
/usr/include/qt6/QtCore/qchar.h:134:24: note: candidate 3: ‘template<class Char, typename std::enable_if<std::disjunction<std::is_same<Char, char32_t>, std::conjunction<std::is_same<Char, wchar_t>, std::integral_constant<bool, true> >, std::is_same<Char, int>, std::is_same<Char, unsigned int> >::value, bool>::type <anonymous> > constexpr QChar::QChar(Char)’
134 | constexpr explicit QChar(const Char ch) noexcept
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:134:24: note: template argument deduction/substitution failed:
/usr/include/qt6/QtCore/qchar.h:133:66: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
133 | template <typename Char, if_explicit_conversion_char<Char> = true>
| ^~~~
/usr/include/qt6/QtCore/qchar.h:132:26: note: candidate 4: ‘template<class Char, typename std::enable_if<std::disjunction<std::is_same<Char, short unsigned int>, std::is_same<Char, short int>, std::is_same<Char, QChar::SpecialCharacter>, std::is_same<Char, QLatin1Char>, std::conjunction<std::is_same<Char, wchar_t>, std::negation<std::integral_constant<bool, true> > >, std::is_same<Char, char16_t> >::value, bool>::type <anonymous> > constexpr QChar::QChar(Char)’
132 | constexpr Q_IMPLICIT QChar(const Char ch) noexcept : ucs(char16_t(ch)) {}
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:132:26: note: template argument deduction/substitution failed:
/usr/include/qt6/QtCore/qchar.h:131:66: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
131 | template <typename Char, if_implicit_conversion_char<Char> = true>
| ^~~~
/usr/include/qt6/QtCore/qchar.h:119:24: note: candidate 5: ‘constexpr QChar::QChar(uchar, uchar)’
119 | constexpr explicit QChar(uchar c, uchar r) noexcept : ucs(char16_t((r << 8) | c)) {}
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:119:24: note: candidate expects 2 arguments, 1 provided
/usr/include/qt6/QtCore/qchar.h:115:26: note: candidate 6: ‘constexpr QChar::QChar()’
115 | constexpr Q_IMPLICIT QChar() noexcept : ucs(0) {}
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:115:26: note: candidate expects 0 arguments, 1 provided
/usr/include/qt6/QtCore/qchar.h:48:31: note: candidate 7: ‘constexpr QChar::QChar(const QChar&)’
48 | class QT6_ONLY(Q_CORE_EXPORT) QChar {
| ^~~~~
/usr/include/qt6/QtCore/qchar.h:48:31: note: no known conversion for argument 1 from ‘profiler::Value<profiler::DataType::Int8, false>::value_type’ {aka ‘signed char’} to ‘const QChar&’
/usr/include/qt6/QtCore/qchar.h:48:31: note: candidate 8: ‘constexpr QChar::QChar(QChar&&)’
/usr/include/qt6/QtCore/qchar.h:48:31: note: no known conversion for argument 1 from ‘profiler::Value<profiler::DataType::Int8, false>::value_type’ {aka ‘signed char’} to ‘QChar&&’
make[2]: *** [profiler_gui/CMakeFiles/profiler_gui.dir/build.make:242: profiler_gui/CMakeFiles/profiler_gui.dir/common_functions.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:237: profiler_gui/CMakeFiles/profiler_gui.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
I'm trying to compile easy_profiler for a project that depends on it. It built fine on older Ubuntu 22.04 libqt5 5.15.3 laptop, but on my ARCH Linux desktop it throws errors like
easy_profiler/profiler_gui/common_functions.cpp:97:101: error: no matching function for call to ‘QChar::QChar(profiler::Value<profiler::DataType::Int8, true>::value_type)’Here are the system details, build commands to reproduce, and the error logs:
👈 System Info
👈 Build Log with Errors
No idea if it is related to newer qt6 no longer allowing string and qchar comparisons as per this thread https://forum.qt.io/topic/154949/qt6-comparing-to-qchar-not-working-anymore/3
I'll try removing qt6 from my system and see if it just works with the older qt5 perhaps and update this soon. Thanks!