在 Ubuntu 23.10 上安装 libadwaita-1-dev 包后,我尝试编译官方文档中的示例:
gcc $(pkg-config --cflags --libs gtk4) $(pkg-config –-cflags --libs libadwaita-1) hello-adwita.c -o hello
不幸的是,它没有起作用。错误信息是:
/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'
…
有谁知道可能是什么原因吗?
gcc
这里的问题是命令扩展所需库的顺序。特别是,符号是从左到右解析的,因此如果您的代码依赖于libawaita-1
并且libawaita-1
依次依赖于gtk-4
库,则顺序应该是所以
但是在这种情况下,输出
pkg-config --libs libadwaita-1
包含 libgtk4 及其所有依赖库,因此您应该需要的是欲了解更多信息,请参阅
这不是有效的编译器命令行:您同时在错误的位置传递编译器和链接器标志。首先是编译器标志,然后是输出文件和输入文件;然后,您需要传递链接器标志:
您还复制了 GTK 编译器和链接器标志:libadwaita 已经依赖于 GTK。
总结: