Após instalar o pacote libadwaita-1-dev no Ubuntu 23.10, tentei compilar o exemplo da documentação oficial :
gcc $(pkg-config --cflags --libs gtk4) $(pkg-config –-cflags --libs libadwaita-1) hello-adwita.c -o hello
Infelizmente, não funcionou. A mensagem de erro é:
/usr/bin/ld: /tmp/cccNMYti.o: in function `glib_autoptr_clear_GtkApplication':
hello-adwita.c:(.text+0x1b): undefined reference to `g_object_unref'
/usr/bin/ld: /tmp/cccNMYti.o: in function `activate_cb':
hello-adwita.c:(.text+0x77): undefined reference to `gtk_application_window_new'
/usr/bin/ld: hello-adwita.c:(.text+0x8a): undefined reference to `gtk_label_new'
/usr/bin/ld: hello-adwita.c:(.text+0x93): undefined reference to `gtk_window_get_type'
/usr/bin/ld: hello-adwita.c:(.text+0xa5): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: hello-adwita.c:(.text+0xba): undefined reference to `gtk_window_set_title'
/usr/bin/ld: hello-adwita.c:(.text+0xbf): undefined reference to `gtk_window_get_type'
…
Alguém tem alguma ideia de qual poderia ser o motivo?
A questão aqui é a ordem em que seu
gcc
comando expande as bibliotecas necessárias. Em particular, os símbolos são resolvidos da esquerda para a direita, portanto, se o seu código dependelibawaita-1
elibawaita-1
depende, por sua vez, dasgtk-4
bibliotecas, a ordem deve serEntão
No entanto, neste caso, a saída
pkg-config --libs libadwaita-1
contém libgtk4 e todas as suas bibliotecas dependentes, então tudo que você precisa éPara mais informações consulte
Essa não é uma linha de comando válida do compilador: você está passando os sinalizadores do compilador e do vinculador ao mesmo tempo e no lugar errado. Os sinalizadores do compilador vão primeiro, seguidos pelo arquivo de saída e pelo arquivo de entrada; então, você precisa passar os sinalizadores do vinculador:
Você também está duplicando o compilador GTK e os sinalizadores do vinculador: libadwaita já depende do GTK.
Resumindo: