bug-binutils
[Top][All Lists]
Advanced

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

[Bug gold/11042] New: Unresolved symbols when using --as-needed


From: robert dot wohlrab at gmx dot de
Subject: [Bug gold/11042] New: Unresolved symbols when using --as-needed
Date: 2 Dec 2009 15:34:28 -0000

X-Bugzilla-Reason: CC

I've rebuild all packages in debian with binutils-gold and noticed that all
packages using a recent version of /usr/share/aclocal/gtk-2.0.m4 fail when they
are using also --as-needed.

Output is always:
configure:12513: gcc -o conftest -g -O2 -D_REENTRANT -I/usr/include/gtk-2.0 -
I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -
I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/glib-2.0 -
Wl,--as-needed conftest.c -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0
-lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -
lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -
configure:12513: $? = 0
configure:12513: ./conftest
./conftest: symbol lookup error: ./conftest: undefined symbol:
gtk_minor_version
configure:12513: $? = 127
configure: program exited with status 127
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_LOCALE_H 1
| #define HAVE_LC_MESSAGES 1
| #define HAVE_BIND_TEXTDOMAIN_CODESET 1
| #define HAVE_GETTEXT 1
| #define HAVE_DCGETTEXT 1
| #define ENABLE_NLS 1
| /* end confdefs.h.  */
|
| #include <gtk/gtk.h>
| #include <stdio.h>
| #include <stdlib.h>
|
| int
| main ()
| {
|   int major, minor, micro;
|   char *tmp_version;
|
|   system ("touch conf.gtktest");
|
|   /* HP/UX 9 (address@hidden) writes to sscanf strings */
|   tmp_version = g_strdup("2.4.0");
|   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
|      printf("%s, bad version string\n", "2.4.0");
|      exit(1);
|    }
|
|   if ((gtk_major_version != 2) ||
|       (gtk_minor_version != 18) ||
|       (gtk_micro_version != 4))
|     {
|       printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but
GTK+ (%d.%d.%d)\n",
|              2, 18, 4,
|              gtk_major_version, gtk_minor_version, gtk_micro_version);
|       printf ("*** was found! If pkg-config was correct, then it is best\n");
|       printf ("*** to remove the old version of GTK+. You may also be able to
fix the error\n");
|       printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or
by editing\n");
|       printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that
is\n");
|       printf("*** required on your system.\n");
|       printf("*** If pkg-config was wrong, set the environment variable
PKG_CONFIG_PATH\n");
|       printf("*** to point to the correct configuration files\n");
|     }
|   else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
|          (gtk_minor_version != GTK_MINOR_VERSION) ||
|            (gtk_micro_version != GTK_MICRO_VERSION))
|     {
|       printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
|            GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
|       printf("*** library (version %d.%d.%d)\n",
|            gtk_major_version, gtk_minor_version, gtk_micro_version);
|     }
|   else
|     {
|       if ((gtk_major_version > major) ||
|         ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
|         ((gtk_major_version == major) && (gtk_minor_version == minor) &&
(gtk_micro_version >= micro)))
|       {
|         return 0;
|        }
|      else
|       {
|         printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
|                gtk_major_version, gtk_minor_version, gtk_micro_version);
|         printf("*** You need a version of GTK+ newer than %d.%d.%d. The
latest version of\n",
|              major, minor, micro);
|         printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n";);
|         printf("***\n");
|         printf("*** If you have already installed a sufficiently new version,
this error\n");
|         printf("*** probably means that the wrong copy of the pkg-config
shell script is\n");
|         printf("*** being found. The easiest way to fix this is to remove the
old version\n");
|         printf("*** of GTK+, but you can also set the PKG_CONFIG environment
to point to the\n");
|         printf("*** correct copy of pkg-config. (In this case, you will have
to\n");
|         printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit
/etc/ld.so.conf\n");
|         printf("*** so that the correct libraries are found at run-
|       }
|     }
|   return 1;
| }

So i've started to test it without --as-needed and then it works. So it is
probably a bug introduced by fixing #10880.

readelf shows following when linked without --as-needed:
 0x0000000000000001 (NEEDED)             Shared library: [libgtk-x11-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgdk-x11-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libatk-1.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libpangoft2-1.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library:
[libgdk_pixbuf-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library:
[libpangocairo-1.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgio-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libcairo.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libpango-1.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libfreetype.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libfontconfig.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libgobject-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgmodule-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

and following when linked with --as-needed
 0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]

I think it should be provided by libgtk-x11-2.0.so.0. If I add -lgtk-x11-2.0
before --as-needed it works.

The reduced size version of the gcc call is:
gcc -o conftest `pkg-config --cflags gtk+-x11-2.0` -Wl,--as-needed conftest.c
`pkg-config --libs gtk+-x11-2.0`

So you can try to compile the attached program, compile it with the mentioned
gcc call and then try to start it with ./conftest

I've used binutils-gold 2.20-4 from Debian sid. Downstream bug is
http://bugs.debian.org/559183

-- 
           Summary: Unresolved symbols when using --as-needed
           Product: binutils
           Version: 2.20
            Status: NEW
          Severity: normal
          Priority: P2
         Component: gold
        AssignedTo: ian at airs dot com
        ReportedBy: robert dot wohlrab at gmx dot de
                CC: bug-binutils at gnu dot org


http://sourceware.org/bugzilla/show_bug.cgi?id=11042

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]