libstdc++.so.0.29 contains undefined reference to libiconv
Yubin Ruan
ablacktshirt@gmail.com
Thu Apr 7 13:21:19 GMT 2022
On Thu, Apr 7, 2022 at 5:02 PM Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
>
>
>
> On Thu, 7 Apr 2022, 03:38 Yubin Ruan via Libstdc++, <libstdc++@gcc.gnu.org> wrote:
>>
>> Hi,
>>
>> I compile GCC 11.2 and get a libstdc++.so.6.0.29 (installed in
>> "/usr/local/mygcc/lib64/") but this shared lib contains undefined
>> reference to libiconv_*.
>>
>> When I compile a hello world program using gcc11.2, I get the following error:
>>
>> > /usr/local/mygcc/bin/g++ -Wall -std=c++17 hw.cc -o hw
>> /usr/local/mygcc/bin/../lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib64/libstdc++.so:
>> undefined reference to `libiconv'
>> /usr/local/mygcc/bin/../lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib64/libstdc++.so:
>> undefined reference to `libiconv_close'
>> /usr/local/mygcc/bin/../lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib64/libstdc++.so:
>> undefined reference to `libiconv_open'
>> collect2: error: ld returned 1 exit status
>>
>> Adding a "-liconv" flag will help this program compile.
>>
>> From ldd's output, the libstdc++.so does not has any dynamic reference
>> to libiconv;
>>
>> > ldd /usr/local/mygcc/lib64/libstdc++.so.6.0.29
>> linux-vdso.so.1 => (0x00007ffce1fea000)
>> libm.so.6 => /lib64/libm.so.6 (0x00007fefc74b8000)
>> libc.so.6 => /lib64/libc.so.6 (0x00007fefc70e9000)
>> /lib64/ld-linux-x86-64.so.2 (0x00007fefc7bd1000)
>> libgcc_s.so.1 =>
>> /usr/local/$INSTALL_PREFX/lib64/libgcc_s.so.1 (0x00007fefc6ed1000)
>>
>> But from nm 's output, there are indeed undefined reference to libiconv*
>>
>> > nm -D /usr/local/mygcc/lib64/libstdc++.so.6.0.29 |grep -i iconv
>> U libiconv
>> U libiconv_close
>> U libiconv_open
>>
>> I already have libiconv installed under /usr/local when compiling
>> GCC11.2, but this does not seems to help;
>
>
> It doesn't help because that is the cause of the problem.
>
> Glibc defines the iconv routines that libstdc++ needs, and so you should not use libiconv on Linux systems using Glibc.
So remove all libiconv libs and headers, and recompile GCC will be
fine? Does it require any more configuration?
How do I make sure that the configuration is correct?
>> And by the way, libiconv seems to only provide dynamic lib; there is
>> no libiconv.a;
>>
>>
>> Previously I have GCC10.2 compiled & installed. The libstdc++.so.0.28
>> also contains undefined ref to libiconv*
>>
>> > nm -D /usr/local/mygcc/lib64/libstdc++.so.6.0.28 |grep -i iconv
>> U libiconv
>> U libiconv_close
>> U libiconv_open
>>
>> but compiling with libstdc++.so.6.0.28 does NOT require "-liconv".
>>
>> So, is there anything that I missed when compiling GCC11.2 which can
>> remove unnecessary dependency of libiconv ?
>>
>> Thanks,
>> Yubin
More information about the Libstdc++
mailing list