Re: GTK+ library access issue?



Interesting. I just tried compiling a simple non-gtk c program:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int
main()
{
  int i;
  double a =3.14;
  double c;

  c = log(a);

  c = pow(a, i);

}


$ gcc -lm test.c
/tmp/cc9RccRJ.o: In function `main':
test.c:(.text+0x1b): undefined reference to `log'
test.c:(.text+0x33): undefined reference to `pow'
collect2: ld returned 1 exit status

Now that is weird. Related? Maybe I need to totally reinstall gcc or even Ubuntu.
Boy I hope this turns out to be something less sinister.

Dave


From: David Buchan <pdbuchan yahoo com>
To: David Nečas <yeti physics muni cz>
Cc: "gtk-list gnome org" <gtk-list gnome org>
Sent: Monday, October 24, 2011 7:06 PM
Subject: Re: GTK+ library access issue?

Hi Dave,

Yes, these commands were copy and pasted directly from the Makefile. I wouldn't trust myself to type it correctly.

I've been using the same Makefile for about 6 months or more. In fact, the program was compiled a day before I had to replace the hard drive.
The only reason I recompiled was to make sure I still could after reinstalling Ubuntu. Oh, how surprised I was.

The first batch of errors are:

main.c: In function ‘main’:
main.c:34:76: warning: variable ‘entry46_text’ set but not used [-Wunused-but-set-variable]
main.o: In function `main':
/main.c:43: undefined reference to `g_threads_got_initialized'
/main.c:44: undefined reference to `g_thread_init'
/main.c:46: undefined reference to `gtk_init'
/main.c:49: undefined reference to `g_malloc0'
/main.c:50: undefined reference to `g_malloc0'
/main.c:51: undefined reference to `g_malloc0'
/main.c:52: undefined reference to `g_malloc0'
/main.c:53: undefined reference to `g_malloc0'
/main.c:54: more undefined references to `g_malloc0' follow
main.o: In function `main':
/main.c:57: undefined reference to `gtk_builder_new'
/main.c:58: undefined reference to `gtk_builder_add_from_file'
/main.c:59: undefined reference to `g_log'
/main.c:60: undefined reference to `g_free'
/main.c:65: undefined reference to `g_slice_alloc'
/main.c:68: undefined reference to `gtk_widget_get_type'
/main.c:68: undefined reference to `gtk_builder_get_object'
/main.c:68: undefined reference to `g_type_check_instance_cast'
/main.c:69: undefined reference to `gtk_widget_get_type'
/main.c:69: undefined reference to `gtk_builder_get_object'
/main.c:69: undefined reference to `g_type_check_instance_cast'
/main.c:70: undefined reference to `gtk_widget_get_type'
/main.c:70: undefined reference to `gtk_builder_get_object'
/main.c:70: undefined reference to `g_type_check_instance_cast'
/main.c:73: undefined reference to `gtk_toggle_button_get_type'
/main.c:73: undefined reference to `gtk_builder_get_object'
/main.c:73: undefined reference to `g_type_check_instance_cast'
/main.c:74: undefined reference to `gtk_toggle_button_get_type'
/main.c:74: undefined reference to `gtk_builder_get_object'
/main.c:74: undefined reference to `g_type_check_instance_cast'
/main.c:75: undefined reference to `gtk_toggle_button_get_type'
/main.c:75: undefined reference to `gtk_builder_get_object'
/main.c:75: undefined reference to `g_type_check_instance_cast'
/main.c:76: undefined reference to `gtk_toggle_button_get_type'
/main.c:76: undefined reference to `gtk_builder_get_object'
/main.c:76: undefined reference to `g_type_check_instance_cast'
/main.c:77: undefined reference to `gtk_widget_get_type'
/main.c:77: undefined reference to `gtk_builder_get_object'
/main.c:77: undefined reference to `g_type_check_instance_cast'
/main.c:78: undefined reference to `gtk_toggle_button_get_type'
/main.c:78: undefined reference to `gtk_builder_get_object'
/main.c:78: undefined reference to `g_type_check_instance_cast'
/main.c:79: undefined reference to `gtk_widget_get_type'
etc... ending with...
collect2: ld returned 1 exit status
make: *** [x] Error 1

The above is a direct copy and paste EXCEPT that I removed the directory structure preceding '/main.c' on each line, and changed the program name to 'x' in the last line.

All in all, there's 1749 lines of this. I painstakingly went through it and except the 1st, rather trivial error, they're all of the same nature.

The first error was not picked up with my previous install. I suspect I now have a slightly newer gcc that is more thorough.

I do wonder whether the Ubuntu repository has changed content, or maybe I forgot that I originally installed something else.
Seems odd though, as things like g_malloc0 and g_free are so fundamental, I would've thought it would be in libgtk2.0-dev.

As I said in a previous email, I installed libgtk-3-dev first, got all these errors, then installed libgtk2.0-dev as well.
When that didn't work, I tried

sudo aptitude remove libgtk-3-dev and tried to compile with gtk2. When that still did the same thing, I went back an did
sudo aptitude install libgtk-3-dev again, figuring that having more libraries increases my chances of success (sign of a desperate man).
My (possibly faulty) understanding is that aptitude carefully keeps track of what is installed and all dependencies, so you get nice clean installs and removals.

Thanks for taking a look Dave.

Dave

From: David Nečas <yeti physics muni cz>
To: David Buchan <pdbuchan yahoo com>
Cc: "gtk-list gnome org" <gtk-list gnome org>
Sent: Monday, October 24, 2011 5:46 PM
Subject: Re: GTK+ library access issue?

On Mon, Oct 24, 2011 at 01:49:05PM -0700, David Buchan wrote:
> I tried pkg-config from the command line and here's what we get:
>
> $ pkg-config --cflags gtk+-2.0 gmodule-2.0
> -pthread -I/usr/include/gtk-2.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12
>
> $ pkg-config --libs   gtk+-2.0 gmodule-2.0
> -pthread -Wl,--export-dynamic -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lrt -lglib-2.0

This looks good.

So, (1) Are these flags actually used in the compilation – check the
actual command printed by make.  I can see your Makefile variables are
called CCFLAGS and LIBS instead of the more usual CFLAGS and LDFLAGS,
however, if they are consistently called like this it is not a problem.
(2) What are the *first* errors you get after cleaning the source tree
and running make?  Failing to link is often caused by some previous
problems; do you really get only linker errors and no errors from
earlier compilation stages?

Yeti




_______________________________________________
gtk-list mailing list
gtk-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-list




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]