https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93602
Bug ID: 93602
Summary: Missing reference to libiconv
Product: gcc
Version: 9.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: ilg at livius dot net
Target Milestone: ---
I'm building GCC 9.2 on an older Ubuntu and the build is eventless, but the
resulting libstdc++ refers to some libiconv symbols, without listing a
reference to the library.
$ readelf -s /home/ilg/opt/xbb-amd64/lib64/libstdc++.so | grep iconv
49: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND libiconv
82: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND libiconv_close
97: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND libiconv_open
$ ldd /home/ilg/opt/xbb-amd64/lib64/libstdc++.so
linux-vdso.so.1 (0x00007ffe18f6c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efc07942000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efc07551000)
/lib64/ld-linux-x86-64.so.2 (0x00007efc07ce0000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
(0x00007efc07339000)
The effect is that building C++ applications is possible only with an explicit
'-liconv' passed to the linker, which is not ok.
GCC 7.x and 8.x are fine, with the same build procedure the libstdc++ shared
library has no undefined references to libiconv.
To be noted that on a newer system (a Manjaro) where 9.2 is installed,
something similar happens:
$ readelf -s /usr/lib/libstdc++.so | grep iconv
24: 0000000000000000 0 FUNC GLOBAL DEFAULT UND
iconv_open@GLIBC_2.17 (44)
125: 0000000000000000 0 FUNC GLOBAL DEFAULT UND
iconv_close@GLIBC_2.17 (44)
174: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv@GLIBC_2.17
(44)
9033: 0000000000000000 0 FUNC GLOBAL DEFAULT UND
iconv_open@@GLIBC_2.17
12636: 0000000000000000 0 FUNC GLOBAL DEFAULT UND
iconv_close@@GLIBC_2.17
14045: 0000000000000000 0 FUNC GLOBAL DEFAULT UND iconv@@GLIBC_2.17
$ ldd /usr/lib/libstdc++.so
linux-vdso.so.1 (0x0000007fbf4da000)
libm.so.6 => /usr/lib/libm.so.6 (0x0000007fbf1d6000)
libc.so.6 => /usr/lib/libc.so.6 (0x0000007fbf069000)
/usr/lib/ld-linux-aarch64.so.1 (0x0000007fbf4ac000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x0000007fbf045000)
It seems that in 9.x the build procedure expects the libiconv functionality to
be provided by one of the other system libraries.
Not to mention that in my build the referred name is 'libiconv_open', while in
the official system it is 'iconv_open'.