[Llvm-bgq-discuss] Linker error: undefined reference to `vtable for std::nested_exception'

Sandipan Mohanty s.mohanty at fz-juelich.de
Fri Jul 18 13:48:08 CDT 2014


Hi everyone,
    I think the linker error is related to how libc++ was compiled. It is 
using libsupc++ from GCC to get the CXX_ABI related functions, and hence 
different versions of GCC lead to different results. Since libc++ is supposed 
to be a "new version of the C++ standard library", perhaps we can try to build 
it without this dependency on a particular version of GCC ? On other systems, 
I have compiled llvm/clang and libc++ using libcxxabi (also from the llvm 
project) as the ABI interface for libc++. 

The resulting compiler, along with a wrapper to automatically add "-lc++abi" 
to the linker flags works nicely on Linux. Running "ldd" on the executables 
generated by this compiler shows that nothing is linked against libstdc++ or 
libsupc++.  For example:

linux-vdso.so.1 (0x00007fff011fe000)
libc++.so.1 => /home/sandipan/local/llvm/svn_stage1/lib/libc++.so.1 
(0x00007fe9ae651000)
libc++abi.so.1 => /home/sandipan/local/llvm/svn_stage1/lib/libc++abi.so.1 
(0x00007fe9ae3cd000)
 libm.so.6 => /lib64/libm.so.6 (0x00007fe9ae0ca000)
 libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe9adeb3000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe9adb04000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe9ad8e6000)
librt.so.1 => /lib64/librt.so.1 (0x00007fe9ad6de000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe9ae915000)

And of course, the executables work and produce correct results, irrespective 
of availability / visibility of libstdc++. I was wondering why we are linking 
to libstdc++ or libsupc++ and not trying libcxxabi. Has anyone tried it on BGQ 
and found problems ?

Best wishes,
Sandipan



On Friday 18 Jul 2014 10:23:59 Michael Schlottke wrote:
> Hi Hal,
> 
> Thanks for checking this out. I installed the last RPMs that we knew
> worked before the toolchain upgrade (r201012-20140207), but to no avail.
> When trying to compile the same MWE program, we get a compiler
> (preprocessor?) error instead, but again it seems to be centered around
> exceptions (I've attached the log). Maybe this sheds some more light on
> the issues we're having.
> 
> Regards,
> 
> Michael
> 
> P.S.: As before, the error occurs only when using bgclang++11 or when
> manually adding -stdlib=libc++ to bgclang++. Otherwise it compiles &
> runs just fine.
> 
> On 17.07.2014 19:21, Hal Finkel wrote:
> > Hi,
> > 
> > This error almost always occurs when you pick up the old libstdc++ library
> > instead of the one from the 4.7.2 toolchain. I'll look at your verbose
> > logs later.> 
> >   -Hal
> > 
> > ----- Original Message -----
> > 
> >> From: "Sandipan Mohanty" <s.mohanty at fz-juelich.de>
> >> To: llvm-bgq-discuss at lists.alcf.anl.gov
> >> Sent: Thursday, July 17, 2014 11:53:07 AM
> >> Subject: Re: [Llvm-bgq-discuss] Linker error: undefined reference to
> >> `vtable for std::nested_exception'
> >> 
> >> Hi!
> >> 
> >>      The linker error Michael mentioned also appears for a simple
> >>      hello world
> >> 
> >> program:
> >> 
> >> #include <iostream>
> >> 
> >> int main()
> >> {
> >> 
> >>      std::cout << "Hello, World!\n";
> >> 
> >> }
> >> 
> >> Compiling it with bgclang++ is fine. Compiling with bgclang++11,
> >> which also
> >> links with libc++, produces the linker error he mentioned about
> >> nested_exception. The nested_exception class members are defined
> >> inside the
> >> exception.cpp file in the libc++ source. But there are lots of macros
> >> influencing what sections get compiled. Is the libc++ in the RPM
> >> compiled with
> >> libsupc++, libcxxrt or libcxxabi as the LIBCXX_CXX_ABI ?
> >> 
> >> /Sandipan
> >> 
> >> On Thursday 17 Jul 2014 11:30:35 Rob Latham wrote:
> >>> See http://www.alcf.anl.gov/user-guides/bgclang-compiler#faq, which
> >>> I
> >>> myself was just staring at last night:
> >>> 
> >>> Linking code compiled with bgclang++ together with code compiled
> >>> with
> >>> bgclang++11 does not work, why?
> >>> 
> >>> Code compiled using bgclang++ uses the same libstdc++ standard
> >>> template
> >>> library (STL) implementation as the system-default GNU
> >>> powerpc64-bgq-linux-g++ compiler. This provides compatibility with
> >>> C++
> >>> libraries, including some system libraries, compiled with the GNU
> >>> toolchain. This STL implementation, however, cannot provide a
> >>> conforming
> >>> C++11 programming environment, and so bgclang++11 uses an
> >>> up-to-date STL
> >>> implementation derived from LLVM's libc++. Unfortunately, this STL
> >>> implementation is incompatible with libstdc++, and so linking
> >>> errors
> >>> will result for functions that use STL objects as part of their
> >>> signatures (i.e. parameter or return types).
> >>> 
> >>> ==rob
> >>> 
> >>> On 07/17/2014 08:48 AM, Michael Schlottke wrote:
> >>>> Hi Hal,
> >>>> 
> >>>> We tried to install the new version of clang on the BG/Q @ FZ
> >>>> Juelich
> >>>> from your rpms, which worked like a breeze (thanks again for your
> >>>> effors!). However, with the new installation we are not able to
> >>>> link
> >>>> even simple problems against libcxx, as all attempts end with the
> >>>> following error:
> >>>> 
> >>>> /bgsys/local/clang/r209570-20140527/libc++/lib/libc++.a(exception.cpp.o
> >>>> ):(
> >>>> .toc+0x0): undefined reference to `vtable for
> >>>> std::nested_exception'
> >>>> clang: error: linker command failed with exit code 1 (use -v to
> >>>> see
> >>>> invocation)
> >>>> 
> >>>> It happens as soon as we try to compile & link a dummy program
> >>>> that has
> >>>> at least one std library include file. If we use bgclang++, the
> >>>> error
> >>>> does not occur, but it does when using either -stdlib=libc++ or
> >>>> bgclang++11.
> >>>> 
> >>>> Do you have any idea what the source of the problem could be? I
> >>>> attached
> >>>> a MWE and the output of running bgclang++11 with -v.
> >>>> 
> >>>> Regards,
> >>>> 
> >>>> Michael
> >>>> 
> >>>> P.S.: We had a driver/toolchain upgrade on JUQUEEN and thus our
> >>>> old
> >>>> clang installations are not working anymore. Maybe this could be
> >>>> related
> >>>> to the problem?
> >>>> 
> >>>> 
> >>>> -----------------------------------------------------------------------
> >>>> ---
> >>>> ----------------------
> >>>> -----------------------------------------------------------------------
> >>>> --
> >>>> ----------------------- Forschungszentrum Juelich GmbH
> >>>> 52425 Juelich
> >>>> Sitz der Gesellschaft: Juelich
> >>>> Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B
> >>>> 3498
> >>>> Vorsitzender des Aufsichtsrats: MinDir Dr. Karl Eugen Huthmacher
> >>>> Geschaeftsfuehrung: Prof. Dr.-Ing. Wolfgang Marquardt
> >>>> (Vorsitzender),
> >>>> Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald
> >>>> Bolt,
> >>>> Prof. Dr. Sebastian M. Schmidt
> >>>> -----------------------------------------------------------------------
> >>>> ---
> >>>> ----------------------
> >>>> -----------------------------------------------------------------------
> >>>> --
> >>>> -----------------------
> >>>> 
> >>>> 
> >>>> 
> >>>> _______________________________________________
> >>>> llvm-bgq-discuss mailing list
> >>>> llvm-bgq-discuss at lists.alcf.anl.gov
> >>>> https://lists.alcf.anl.gov/mailman/listinfo/llvm-bgq-discuss
> >> 
> >> _______________________________________________
> >> llvm-bgq-discuss mailing list
> >> llvm-bgq-discuss at lists.alcf.anl.gov
> >> https://lists.alcf.anl.gov/mailman/listinfo/llvm-bgq-discuss
> 
> ----------------------------------------------------------------------------
> --------------------
> ---------------------------------------------------------------------------
> --------------------- Forschungszentrum Juelich GmbH
> 52425 Juelich
> Sitz der Gesellschaft: Juelich
> Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498
> Vorsitzender des Aufsichtsrats: MinDir Dr. Karl Eugen Huthmacher
> Geschaeftsfuehrung: Prof. Dr.-Ing. Wolfgang Marquardt (Vorsitzender),
> Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt,
> Prof. Dr. Sebastian M. Schmidt
> ----------------------------------------------------------------------------
> --------------------
> ---------------------------------------------------------------------------
> ---------------------



More information about the llvm-bgq-discuss mailing list