2011-11-16 75 views
-1

因此,我很高兴在Ubuntu 11.04中学习了3.0的GTK +编程,甚至还有一个工作的标尺程序正在运行。它完美地编译了我的makefile。GTK3程序不再编译 - 链接时GCC“未定义参考”

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

该项目可以在这里找到:https://github.com/zjmichen/ruler

+0

问题的外部链接不再有效,所以问题没有用。 –

回答

1

我测试过了,它编译得很好。

[email protected] ~/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 
[email protected] ~/work/zjmichen-ruler-e783fe1 $ 

但是这是在Linux Mint上。在这里,你已经得到了通过pkg配置

-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和改线14在生成文件

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

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

+0

ahh拧紧。首先尝试makefile ... –

+0

为什么要将pkg-config的--libs输出提供给编译,将--cflags提供给链接阶段?这不是很好的风格和教育 – Lothar

0

不幸的是我目前还没有进入安装运行Linux机器GTK3.0,而是看你的代码,我发现X11/xlib.h列入在main.c中。既然你没有在你的代码的任何地方使用X11代码,并且你正在使用'pkgconfig ... gtk + -3.0'而不是gtk + -X11-3.0,我假设你可以删除包含语句。如果您确实需要X11库,请确保它在编译器标志中列出。我希望这有助于:)

+0

感谢您花时间检查它 - 我包含X11(至少在window.c中)的原因是要查找光标位置,即使它不在窗口中。我找不到Gtk的功能,但如果你知道更好的方法来做到这一点,我将不胜感激。当然,这是一个不同的问题。 无论如何,尽管消除了这种依赖关系,问题仍然存在。 –