There is a breaking change in glib 2.68.0: https://bugzilla.redhat.com/show_bug.cgi?id=1926239 https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1935#note_1034039 In short, the glib headers cannot be included in ``extern "C"'' any longer. This breaks gnucash 4.4 and 4.5. A lot of error output, looking basically like this: In file included from /usr/pkg/include/glib-2.0/glib/gatomic.h:31, from /usr/pkg/include/glib-2.0/glib/gthread.h:32, from /usr/pkg/include/glib-2.0/glib/gasyncqueue.h:32, from /usr/pkg/include/glib-2.0/glib.h:32, from /scratch/finance/gnucash/work/gnucash-4.5/libgnucash/engine/SchedXaction.h:42, from /scratch/finance/gnucash/work/gnucash-4.5/gnucash/gnome/assistant-loan.cpp:33: /usr/include/g++/type_traits:3024:3: error: template with C linkage 3024 | template<typename _Tp> | ^~~~~~~~ /scratch/finance/gnucash/work/gnucash-4.5/gnucash/gnome/assistant-loan.cpp:26:1: note: 'extern "C"' linkage started here 26 | extern "C" | ^~~~~~~~~~ The glib includes are sometimes in other includes - here in SchedXAction.h, so it's not easy to see what needs to be moved.
Rats. assistant_loan.cpp was modified as part of https://github.com/Gnucash/gnucash/pull/912 for this exact problem, but Bill put the glib include after the extern "C" block so it gets included first from SchedXAction.h. We had to do a bunch more to get CI tests to pass on Arch Linux as it had picked up the changes in the meantime. It's obvious what to do, but I'm a bit curious about why it works on Arch but still fails for you. Are you perhaps building with clang?
No clang, that's with gcc 9.3.0. I tried turning off aqbanking, ofx, dbi but that didn't help. I'm not sure what the difference is, sorry. I played around a bit and found a diff that made it compile on my system: --- gnucash/gnome/assistant-loan.cpp.orig 2021-03-26 23:08:11.000000000 +0000 +++ gnucash/gnome/assistant-loan.cpp @@ -23,6 +23,10 @@ * Boston, MA 02110-1301, USA gnu@gnu.org * \********************************************************************/ +#include <glib.h> +#include <glib/gi18n.h> +#include <gtk/gtk.h> + extern "C" { #include <config.h> @@ -50,9 +54,6 @@ extern "C" #endif } -#include <glib.h> -#include <glib/gi18n.h> -#include <gtk/gtk.h> #include <gnc-locale-utils.hpp> #include <boost/locale.hpp> #include <string> I guess glib's multiple-inclusion-protection in the header saves us here :)
> I guess glib's multiple-inclusion-protection in the header saves us here :) Exactly. It's also what kills us when #include <glib.h> is after the extern "C" block. Interesting as well that fixing this one instance gets GnuCash to build: There are several more in the original commit.
Sorry, that's the one I need on top of gnucash 4.5.
Fixed for 4.6. I've moved all of the includes from PR 912.