Red Hat Bugzilla – Bug 6930
Both GLIBC_2.0 and GLIBC_2.1 suffixes for some APIs
Last modified: 2008-05-01 11:37:52 EDT
The LSB is trying to inventory the APIs and libraries used
by commercial applications such as StarOffice51 and
WordPerfect8; however, while extracting APIs from the
applications I am having a hard time matching some of them
up within the libraries, because on RedHat 6.0 some of the
APIs have two entries with a "GLIBC_2.0" or "GLIBC_2.1"
I have been trying to figure out how the application retains
the information as to which API/suffix it should resolve to
at runtime. Does anyone have any ideas or a recommendation
as to who I should ask?
+ nm -u -D /usr/local/netscape/netscape | grep fclose
+ ldd /usr/local/netscape/netscape | grep libc
libc.so.6 => /lib/libc.so.6 (0x401ac000)
+ nm -g /lib/libc.so.6 | grep fclose
000509f0 T _IO_fclose@@GLIBC_2.1
00053540 T _IO_fclose@GLIBC_2.0
000509f0 T fclose@@GLIBC_2.1
00053540 T fclose@GLIBC_2.0
00052fec W fcloseall
+ rpm -qif /lib/libc.so.6
Name : glibc Relocations: (not relocateable)
Version : 2.1.1 Vendor: Red Hat Software
Release : 6 Build Date: Fri Apr 16 17:50:24 1999
Install date: Wed Sep 15 16:33:53 1999 Build Host:
Group : System Environment/Libraries Source RPM:
Size : 26821530 License: LGPL
Packager : Red Hat Software
Summary : GNU libc
Contains the standard libraries that are used by multiple
the system. In order to save disk space and memory, as well
ease upgrades, common system code is kept in one place and
programs. This package contains the most important sets of
the standard C library and the standard math library.
Without these, a
Linux system will not function. It also contains national
support and timezone databases.
This is the symbol versioning used in glibc >= 2.1.
For example, a foo@@GLIBC_2.0 is the glibc-2.0 version of
a function, while foo@@GLIBC_2.1 is the glibc-2.1 version.
The symbol matching is done at build time. For example, if
you do objdump -p on a glibc-2.1 binary, you'll get:
as the required libraries, and:
required from libBrokenLocale.so.1:
0x0d696910 0x00 07 GLIBC_2.0
required from libdl.so.2:
0x0d696911 0x00 08 GLIBC_2.1
0x0d696910 0x00 05 GLIBC_2.0
required from libm.so.6:
0x0d696911 0x00 06 GLIBC_2.1
0x0d696910 0x00 03 GLIBC_2.0
required from libc.so.6:
0x0d696911 0x00 04 GLIBC_2.1
0x0d696910 0x00 02 GLIBC_2.0
as the required versions of those libraries. This says that this binary,
for example, uses both glibc-2.1 and glibc-2.0 interfaces to libc.
Binaries that have no symbol versioning are mapped to the glibc-2.0
interfaces (since glibc-2.0 had no symbol versioning.)
Does that help?
get something like:
These symbols are normal - it is part of the symbol versioning implemented in