所以我在 Ubuntu 11.04 中愉快地学习 GTK+ 编程 3.0,甚至运行了一个工作的标尺程序。它完美地与我的 makefile 一起编译。
我花了一些时间离开它,升级到 11.10,现在又回到了它。但是,唉,当我尝试构建程序时,我的程序中几乎每个 gtk 调用都会收到很多“未定义的引用”错误。编译很好 - 问题出在链接时。
该项目可以在这里找到: https ://github.com/zjmichen/ruler
所以我在 Ubuntu 11.04 中愉快地学习 GTK+ 编程 3.0,甚至运行了一个工作的标尺程序。它完美地与我的 makefile 一起编译。
我花了一些时间离开它,升级到 11.10,现在又回到了它。但是,唉,当我尝试构建程序时,我的程序中几乎每个 gtk 调用都会收到很多“未定义的引用”错误。编译很好 - 问题出在链接时。
该项目可以在这里找到: https ://github.com/zjmichen/ruler
我已经测试过了,它编译得很好。
superman@superman-mint ~/work/zjmichen-ruler-e783fe1 $ make
gcc -c -Wall `pkg-config --cflags --libs gtk+-3.0` main.c
gcc -c -Wall `pkg-config --cflags --libs gtk+-3.0` window.c
gcc -c -Wall `pkg-config --cflags --libs gtk+-3.0` graphics.c
gcc -c -Wall `pkg-config --cflags --libs gtk+-3.0` mouse.c
gcc `pkg-config --cflags --libs gtk+-3.0` main.o window.o graphics.o mouse.o -o zruler
superman@superman-mint ~/work/zjmichen-ruler-e783fe1 $
但这是在 Linux Mint 上。在这里,您获得了 pkg-config 生成的参数
-pthread -DGSEAL_ENABLE -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gtk-3.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pixman-1 -pthread -L/usr/lib/x86_64-linux-gnu -lgtk-3 -lgdk-3 -latk-1.0 -lcairo-gobject -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lm -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0
我还在 Ubuntu 11.10 上进行了快速测试,确实无法编译。今晚我会好好看看。
所以我确实在 Ubuntu 上对其进行了测试,并将 makefile 中的第 14 行更改为
$(CC) $(OBJS) $(GTKFLAGS) -o $(NAME)
这改变了正在链接的目标文件和库的顺序。我不知道为什么在新的 Ubuntu 上会出现这个问题。也许是因为它是不同版本的 gcc。在我的 linux mint gcc 上是 ubuntu 11.10 上的 4.5.2 版本,它是 4.6.1
不幸的是,我目前无法访问安装了 GTK3.0 的正在运行的 Linux 机器,但查看您的代码,我注意到 main.c 中包含 X11/xlib.h。由于您没有在代码中的任何地方使用 X11 代码并且您使用的是 'pkgconfig ... gtk+-3.0' 而不是 gtk+-X11-3.0,我假设您可以删除该包含语句。如果您确实需要 X11 库,请确保它在编译器标志中列出。我希望这有帮助 :)