Argus Sample Utils compilation error

Hello! I have upgraded my Jetson TX2 DevKit from Jetpack 4.4 to 4.5.1 and I am having a problem compiling my project, which uses Argus.

I have linked /usr/src/jetson_multimedia_api/argus/samples/utils as a library, which I compile because this part of Argus is not compiled (P. S. Why are important Argus things in samples folder???)

Here’s the compilation log. I am compiling with GCC 9.3.0 and compiling in C++17. (Yes, I really need C++17)

[ 50%] Building CXX object utils/CMakeFiles/argussampleutils.dir/gtk/GuiElement.cpp.o
In file included from /usr/include/gtk-3.0/gtk/gtk.h:100,
             from /usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:31:
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h:66:8: warning: unnecessary parentheses in declaration of ‘__gtk_reserved1’ [-Wparentheses]
   66 |   void (*__gtk_reserved1);
  |        ^
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h:67:8: warning: unnecessary parentheses in declaration of ‘__gtk_reserved2’ [-Wparentheses]
   67 |   void (*__gtk_reserved2);
  |        ^
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h:68:8: warning: unnecessary parentheses in declaration of ‘__gtk_reserved3’ [-Wparentheses]
   68 |   void (*__gtk_reserved3);
  |        ^
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h:69:8: warning: unnecessary parentheses in declaration of ‘__gtk_reserved4’ [-Wparentheses]
   69 |   void (*__gtk_reserved4);
  |        ^
In file included from /usr/include/gtk-3.0/gtk/gtk.h:271,
             from /usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:31:
/usr/include/gtk-3.0/gtk/deprecated/gtkstatusicon.h:74:8: warning: unnecessary parentheses in declaration of ‘__gtk_reserved1’ [-Wparentheses]
   74 |   void (*__gtk_reserved1);
  |        ^
/usr/include/gtk-3.0/gtk/deprecated/gtkstatusicon.h:75:8: warning: unnecessary parentheses in declaration of ‘__gtk_reserved2’ [-Wparentheses]
   75 |   void (*__gtk_reserved2);
  |        ^
/usr/include/gtk-3.0/gtk/deprecated/gtkstatusicon.h:76:8: warning: unnecessary parentheses in declaration of ‘__gtk_reserved3’ [-Wparentheses]
   76 |   void (*__gtk_reserved3);
  |        ^
/usr/include/gtk-3.0/gtk/deprecated/gtkstatusicon.h:77:8: warning: unnecessary parentheses in declaration of ‘__gtk_reserved4’ [-Wparentheses]
   77 |   void (*__gtk_reserved4);
  |        ^
In file included from /usr/include/glib-2.0/gobject/gobject.h:28,
             from /usr/include/glib-2.0/gobject/gbinding.h:29,
             from /usr/include/glib-2.0/glib-object.h:23,
             from /usr/include/glib-2.0/gio/gioenums.h:28,
             from /usr/include/glib-2.0/gio/giotypes.h:28,
             from /usr/include/glib-2.0/gio/gio.h:26,
             from /usr/include/gtk-3.0/gdk/gdkapplaunchcontext.h:28,
             from /usr/include/gtk-3.0/gdk/gdk.h:32,
             from /usr/include/gtk-3.0/gtk/gtk.h:30,
             from /usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:31:
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp: In instantiation of ‘bool ArgusSamples::GuiElementValue<T>::initializeRange() [with VT = long unsigned int; T = Argus::Range<long unsigned int>]’:
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1658:5:   required from here
/usr/include/glib-2.0/gobject/gclosure.h:70:27: error: invalid use of member function ‘template<class VT> static void ArgusSamples::GuiElementValue<T>::onGuiElementChangedRange(GtkWidget*, gpointer) [with VT = VT; T = Argus::Range<long unsigned int>]’ (did you forget the ‘()’ ?)
   70 | #define G_CALLBACK(f)    ((GCallback) (f))
/usr/include/glib-2.0/gobject/gsignal.h:475:60: note: in definition of macro ‘g_signal_connect’
  475 |     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |                                                            ^~~~~~~~~
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1600:9: note: in expansion of macro ‘G_CALLBACK’
 1600 |         G_CALLBACK(GuiElementValue<T>::onGuiElementChangedRange<VT>), this);
  |         ^~~~~~~~~~
/usr/include/glib-2.0/gobject/gclosure.h:70:27: error: invalid use of member function ‘template<class VT> static void ArgusSamples::GuiElementValue<T>::onGuiElementChangedRange(GtkWidget*, gpointer) [with VT = VT; T = Argus::Range<long unsigned int>]’ (did you forget the ‘()’ ?)
   70 | #define G_CALLBACK(f)    ((GCallback) (f))
/usr/include/glib-2.0/gobject/gsignal.h:475:60: note: in definition of macro ‘g_signal_connect’
  475 |     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |                                                            ^~~~~~~~~
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1628:9: note: in expansion of macro ‘G_CALLBACK’
 1628 |         G_CALLBACK(GuiElementValue<T>::onGuiElementChangedRange<VT>), this);
  |         ^~~~~~~~~~
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp: In instantiation of ‘bool ArgusSamples::GuiElementValue<T>::initializeRange() [with VT = float; T = Argus::Range<float>]’:
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1676:5:   required from here
/usr/include/glib-2.0/gobject/gclosure.h:70:27: error: invalid use of member function ‘template<class VT> static void ArgusSamples::GuiElementValue<T>::onGuiElementChangedRange(GtkWidget*, gpointer) [with VT = VT; T = Argus::Range<float>]’ (did you forget the ‘()’ ?)
   70 | #define G_CALLBACK(f)    ((GCallback) (f))
/usr/include/glib-2.0/gobject/gsignal.h:475:60: note: in definition of macro ‘g_signal_connect’
  475 |     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |                                                            ^~~~~~~~~
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1600:9: note: in expansion of macro ‘G_CALLBACK’
 1600 |         G_CALLBACK(GuiElementValue<T>::onGuiElementChangedRange<VT>), this);
  |         ^~~~~~~~~~
/usr/include/glib-2.0/gobject/gclosure.h:70:27: error: invalid use of member function ‘template<class VT> static void ArgusSamples::GuiElementValue<T>::onGuiElementChangedRange(GtkWidget*, gpointer) [with VT = VT; T = Argus::Range<float>]’ (did you forget the ‘()’ ?)
   70 | #define G_CALLBACK(f)    ((GCallback) (f))
/usr/include/glib-2.0/gobject/gsignal.h:475:60: note: in definition of macro ‘g_signal_connect’
  475 |     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |                                                            ^~~~~~~~~
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1628:9: note: in expansion of macro ‘G_CALLBACK’
 1628 |         G_CALLBACK(GuiElementValue<T>::onGuiElementChangedRange<VT>), this);
  |         ^~~~~~~~~~
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp: In instantiation of ‘bool ArgusSamples::GuiElementValue<T>::initializeRange() [with VT = unsigned int; T = Argus::Range<unsigned int>]’:
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1685:5:   required from here
/usr/include/glib-2.0/gobject/gclosure.h:70:27: error: invalid use of member function ‘template<class VT> static void ArgusSamples::GuiElementValue<T>::onGuiElementChangedRange(GtkWidget*, gpointer) [with VT = VT; T = Argus::Range<unsigned int>]’ (did you forget the ‘()’ ?)
   70 | #define G_CALLBACK(f)    ((GCallback) (f))
/usr/include/glib-2.0/gobject/gsignal.h:475:60: note: in definition of macro ‘g_signal_connect’
  475 |     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |                                                            ^~~~~~~~~
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1600:9: note: in expansion of macro ‘G_CALLBACK’
 1600 |         G_CALLBACK(GuiElementValue<T>::onGuiElementChangedRange<VT>), this);
  |         ^~~~~~~~~~
/usr/include/glib-2.0/gobject/gclosure.h:70:27: error: invalid use of member function ‘template<class VT> static void ArgusSamples::GuiElementValue<T>::onGuiElementChangedRange(GtkWidget*, gpointer) [with VT = VT; T = Argus::Range<unsigned int>]’ (did you forget the ‘()’ ?)
   70 | #define G_CALLBACK(f)    ((GCallback) (f))
/usr/include/glib-2.0/gobject/gsignal.h:475:60: note: in definition of macro ‘g_signal_connect’
  475 |     g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |                                                            ^~~~~~~~~
/usr/src/jetson_multimedia_api/argus/samples/utils/gtk/GuiElement.cpp:1628:9: note: in expansion of macro ‘G_CALLBACK’
 1628 |         G_CALLBACK(GuiElementValue<T>::onGuiElementChangedRange<VT>), this);
  |         ^~~~~~~~~~
utils/CMakeFiles/argussampleutils.dir/build.make:302: recipe for target 'utils/CMakeFiles/argussampleutils.dir/gtk/GuiElement.cpp.o' failed
make[2]: *** [utils/CMakeFiles/argussampleutils.dir/gtk/GuiElement.cpp.o] Error 1
CMakeFiles/Makefile2:238: recipe for target 'utils/CMakeFiles/argussampleutils.dir/all' failed
make[1]: *** [utils/CMakeFiles/argussampleutils.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

I think you can follow the /usr/src/jetson_multimedia_apu/argus/README.txt to build the libargussampleutils.a then link to it.

It doesn’t matter from where I build this - I have this problem with building fundamentally - I think there must be a bug in the Argus code to do with C++17 or C++14 template changes

Suppose current only support gcc 7.5.0

1 Like

Yeah, I guess you’re right. I adapted my program to work with older C++ and now am using GCC 7.5.0. Thanks!