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

Hal Finkel hfinkel at anl.gov
Fri Jul 18 14:10:11 CDT 2014


Sandipan,

Yes, the libc++ build uses a special libc++-over-libstdc++ configuration (which is a little different from just using libsupc++, but that's another story). This is a supported configuration mode for libc++, but will only work if you have a copy of the relevant libstdc++.

Now why do we need all of this? Because we need to be able to statically link the PAMI implementation, which was compiled against libstdc++, when we link in the system MPI libraries. At some point, I'd like to have a native bgclang-libc++ build of PAMI, and MPICH, and then we can clean up a lot of this. Until then, we're stuck with the current situation. To make things easier, for the next bgclang release, I'll probably just package the necessary libstdc++ files with bgclang so this won't be as painful.

In the mean time, I'll put a tar.gz with the libstdc++ files on the web site so they'll be easy to get.

Thanks again,
Hal

----- Original Message -----
> From: "Sandipan Mohanty" <s.mohanty at fz-juelich.de>
> To: llvm-bgq-discuss at lists.alcf.anl.gov
> Sent: Friday, July 18, 2014 1:48:08 PM
> Subject: Re: [Llvm-bgq-discuss] Linker error: undefined reference to `vtable	for std::nested_exception'
> 
> 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
> > ----------------------------------------------------------------------------
> > --------------------
> > ---------------------------------------------------------------------------
> > ---------------------
> 
> _______________________________________________
> llvm-bgq-discuss mailing list
> llvm-bgq-discuss at lists.alcf.anl.gov
> https://lists.alcf.anl.gov/mailman/listinfo/llvm-bgq-discuss
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory


More information about the llvm-bgq-discuss mailing list