GTK3程序不再编译-GCC“;“未定义引用”;在连接时间

GTK3程序不再编译-GCC“;“未定义引用”;在连接时间,gcc,reference,undefined,gtk3,Gcc,Reference,Undefined,Gtk3,所以我在Ubuntu11.04中愉快地学习了GTK+编程,甚至运行了一个运行正常的标尺程序。它与我的makefile完美地编译在一起 我花了一些时间从它,升级到11.10,现在已经回来了。但是,唉,当我尝试构建程序时,我的程序中几乎每个gtk调用都会出现很多“未定义引用”错误。编译很好-问题在链接时间 该项目可以在这里找到:不幸的是,我目前无法访问安装了GTK3.0的正在运行的Linux机器,但是查看您的代码,我注意到main.c中包含了X11/xlib.h。由于您在代码中的任何位置都没有使用X

所以我在Ubuntu11.04中愉快地学习了GTK+编程,甚至运行了一个运行正常的标尺程序。它与我的makefile完美地编译在一起

我花了一些时间从它,升级到11.10,现在已经回来了。但是,唉,当我尝试构建程序时,我的程序中几乎每个gtk调用都会出现很多“未定义引用”错误。编译很好-问题在链接时间


该项目可以在这里找到:

不幸的是,我目前无法访问安装了GTK3.0的正在运行的Linux机器,但是查看您的代码,我注意到main.c中包含了X11/xlib.h。由于您在代码中的任何位置都没有使用X11代码,并且您正在使用“pkgconfig…”。。。gtk+-3.0'而不是gtk+-X11-3.0,我假设您可以删除include语句。如果确实需要X11库,请确保它列在编译器标志中。我希望这有帮助:)

我已经测试过了,并且编译得很好

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 $
但这是在LinuxMint上。这里有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 
我还在Ubuntu11.10上做了一个快速测试,它确实没有编译。今晚我要好好看看

所以我在Ubuntu上测试了它,并将makefile中的第14行改为

$(CC) $(OBJS) $(GTKFLAGS) -o $(NAME)

这将更改正在链接的对象文件和库的顺序。我不知道为什么这个问题发生在新的Ubuntu上。可能是因为它是gcc的另一个版本。在我的linux上,mint gcc是ubuntu 11.10上的4.5.2版,它是4.6.1

,感谢您花时间查看它——我之所以包括X11(至少在window.c中)是为了找到光标位置,即使它不在窗口中。我找不到Gtk的功能,但如果您知道更好的方法,我将不胜感激。当然,这是另一个问题。无论如何,尽管删除了此依赖项,问题仍然存在。为什么要将pkg config中的--libs输出馈送到编译阶段,将--cflags馈送到链接阶段?这是不好的风格和教育问题的外部联系不再有效,所以问题是没有用的。