GTK3程序不再编译 - 链接时GCC“未定义引用”

时间:2011-11-16 09:57:12

标签: gcc reference undefined gtk3

所以我在Ubuntu 11.04中用3.0快速学习GTK +编程,甚至还运行了一个正在运行的统治程序。它与我的makefile完美编译。

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

可在此处找到该项目:https://github.com/zjmichen/ruler

2 个答案:

答案 0 :(得分:1)

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

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上薄荷gcc是ubuntu 11.10上的版本4.5.2,它是4.6.1

答案 1 :(得分:0)

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