'Trouble getting gtkmm-4.0 to work on macOS Monterey

I'm having trouble getting gtkmm-4.0 to work on Mac OS Monterey.

Here is a simple C++ application that uses gtkmm4.

// helloworld.cpp
#include <gtkmm.h>

class MyWindow : public Gtk::Window
{
public:
  MyWindow();
};

MyWindow::MyWindow()
{
  set_title("Basic application");
  set_default_size(200, 200);
}

int main(int argc, char* argv[])
{
  auto app = Gtk::Application::create("org.gtkmm.examples.base");

  return app->make_window_and_run<MyWindow>(argc, argv);
}

Then I compile this application with g++, followed by demangled error messages through llvm-cxxfilt.

g++-11 helloworld.cpp -o helloworld `pkg-config --cflags --libs gtkmm-4.0`
Undefined symbols for architecture arm64:
  "Gtk::ShortcutManager::add_controller_vfunc(std::shared_ptr<Gtk::ShortcutController> const&)", referenced from:
      vtable for MyWindow in ccevdqQk.o
      construction vtable for Gtk::Window-in-MyWindow in ccevdqQk.o
      construction vtable for Gtk::ShortcutManager-in-MyWindow in ccevdqQk.o
  "Gtk::ShortcutManager::remove_controller_vfunc(std::shared_ptr<Gtk::ShortcutController> const&)", referenced from:
      vtable for MyWindow in ccevdqQk.o
      construction vtable for Gtk::Window-in-MyWindow in ccevdqQk.o
      construction vtable for Gtk::ShortcutManager-in-MyWindow in ccevdqQk.o
  "Gtk::Widget::snapshot_vfunc(std::shared_ptr<Gtk::Snapshot> const&)", referenced from:
      vtable for MyWindow in ccevdqQk.o
      construction vtable for Gtk::Window-in-MyWindow in ccevdqQk.o
      construction vtable for Gtk::Widget-in-MyWindow in ccevdqQk.o
  "Gtk::Widget::on_query_tooltip(int, int, bool, std::shared_ptr<Gtk::Tooltip> const&)", referenced from:
      vtable for MyWindow in ccevdqQk.o
      construction vtable for Gtk::Window-in-MyWindow in ccevdqQk.o
      construction vtable for Gtk::Widget-in-MyWindow in ccevdqQk.o

Question: Does anyone know why I am getting the above errors, and how I can compile the C++ application?

Here is the output of pkg-config --cflags --libs gtkmm-4.0

% pkg-config --cflags --libs gtkmm-4.0
-I/opt/homebrew/Cellar/libffi/3.4.2/include -I/opt/homebrew/Cellar/gtkmm4/4.2.0/include/gtkmm-4.0 -I/opt/homebrew/Cellar/gtkmm4/4.2.0/lib/gtkmm-4.0/include -I/opt/homebrew/Cellar/pangomm/2.50.0/include/pangomm-2.48 -I/opt/homebrew/Cellar/pangomm/2.50.0/lib/pangomm-2.48/include -I/opt/homebrew/Cellar/glibmm/2.70.0/include/giomm-2.68 -I/opt/homebrew/Cellar/glibmm/2.70.0/lib/giomm-2.68/include -I/opt/homebrew/Cellar/glibmm/2.70.0/include/glibmm-2.68 -I/opt/homebrew/Cellar/glibmm/2.70.0/lib/glibmm-2.68/include -I/opt/homebrew/Cellar/cairomm/1.16.1/include/cairomm-1.16 -I/opt/homebrew/Cellar/cairomm/1.16.1/lib/cairomm-1.16/include -I/opt/homebrew/Cellar/libsigc++/3.0.7/include/sigc++-3.0 -I/opt/homebrew/Cellar/libsigc++/3.0.7/lib/sigc++-3.0/include -I/opt/homebrew/Cellar/gtk4/4.6.0/include/gtk-4.0/unix-print -I/opt/homebrew/Cellar/gtk4/4.6.0/include/gtk-4.0 -I/opt/homebrew/Cellar/glib/2.70.3/include/gio-unix-2.0 -I/opt/homebrew/Cellar/libepoxy/1.5.9/include -I/opt/homebrew/Cellar/cairo/1.16.0_5/include/cairo -I/opt/homebrew/Cellar/pango/1.50.3/include/pango-1.0 -I/opt/homebrew/Cellar/harfbuzz/3.3.1/include/harfbuzz -I/opt/homebrew/Cellar/pango/1.50.3/include/pango-1.0 -I/opt/homebrew/Cellar/fribidi/1.0.11/include/fribidi -I/opt/homebrew/Cellar/harfbuzz/3.3.1/include/harfbuzz -I/opt/homebrew/Cellar/graphite2/1.3.14/include -I/opt/homebrew/Cellar/gdk-pixbuf/2.42.6/include/gdk-pixbuf-2.0 -I/opt/homebrew/Cellar/libpng/1.6.37/include/libpng16 -I/opt/homebrew/Cellar/libtiff/4.3.0/include -I/opt/homebrew/Cellar/cairo/1.16.0_5/include/cairo -I/opt/homebrew/Cellar/pixman/0.40.0/include/pixman-1 -I/opt/homebrew/Cellar/fontconfig/2.13.1/include -I/opt/homebrew/opt/freetype/include/freetype2 -I/opt/homebrew/Cellar/libpng/1.6.37/include/libpng16 -I/opt/homebrew/Cellar/libxcb/1.14_1/include -I/opt/homebrew/Cellar/libxrender/0.9.10/include -I/opt/homebrew/Cellar/libxext/1.3.4/include -I/opt/homebrew/Cellar/libx11/1.7.3.1/include -I/opt/homebrew/Cellar/libxcb/1.14_1/include -I/opt/homebrew/Cellar/libxau/1.0.9/include -I/opt/homebrew/Cellar/libxdmcp/1.1.3/include -I/opt/homebrew/Cellar/graphene/1.10.6/include/graphene-1.0 -I/opt/homebrew/Cellar/graphene/1.10.6/lib/graphene-1.0/include -I/opt/homebrew/Cellar/glib/2.70.3/include -I/opt/homebrew/Cellar/glib/2.70.3/include/glib-2.0 -I/opt/homebrew/Cellar/glib/2.70.3/lib/glib-2.0/include -I/opt/homebrew/opt/gettext/include -I/opt/homebrew/Cellar/pcre/8.45/include -I/opt/homebrew/Cellar/xorgproto/2021.5/include -L/opt/homebrew/Cellar/gtkmm4/4.2.0/lib -L/opt/homebrew/Cellar/pangomm/2.50.0/lib -L/opt/homebrew/Cellar/glibmm/2.70.0/lib -L/opt/homebrew/Cellar/cairomm/1.16.1/lib -L/opt/homebrew/Cellar/libsigc++/3.0.7/lib -L/opt/homebrew/Cellar/gtk4/4.6.0/lib -L/opt/homebrew/Cellar/pango/1.50.3/lib -L/opt/homebrew/Cellar/harfbuzz/3.3.1/lib -L/opt/homebrew/Cellar/gdk-pixbuf/2.42.6/lib -L/opt/homebrew/Cellar/cairo/1.16.0_5/lib -L/opt/homebrew/Cellar/graphene/1.10.6/lib -L/opt/homebrew/Cellar/glib/2.70.3/lib -L/opt/homebrew/opt/gettext/lib -lgtkmm-4.0 -lpangomm-2.48 -lgiomm-2.68 -lglibmm-2.68 -lcairomm-1.16 -lsigc-3.0 -lgtk-4 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lgraphene-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl

I'm using macOS Monterey with arm64 architecture.

% arch
arm64


Solution 1:[1]

on MacOS Monterey, Mac M1 and g++ (Homebrew GCC 11.3.0) 11.2.0 using llvm-cxxfilt on output of this line compilation

g++ helloworld.cpp -o helloworld pkg-config --cflags --libs gtkmm-4.0 I get:

Undefined symbols for architecture arm64:

Gtk::ShortcutManager::add_controller_vfunc(std::shared_ptrGtk::ShortcutController const&)

Gtk::ShortcutManager::remove_controller_vfunc(std::shared_ptrGtk::ShortcutController const&)

Gtk::Widget::snapshot_vfunc(std::shared_ptrGtk::Snapshot const&)

Gtk::Widget::on_query_tooltip(int, int, bool, std::shared_ptrGtk::Tooltip const&)

There are missing link libs ? How to compile gtkmm4 simple file on MacOs ? Thank You In Advance.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 amd25