[Trilinos-Users] Building Trilinos with gcc 5.1
Brian Granzow
brian.granzow at gmail.com
Tue Jun 2 10:44:09 EDT 2015
I received the following error at link time while trying to build Albany
using a shared library version of publicTrilinos that was built with gcc
5.1 compilers (publicTrilinos git hash
5d63251dd75776deb571d995114b89fb8094230f):
[100%] Built target LCM
Linking CXX executable AlbanyT
libstk_util_diag.so.12.1: undefined reference to
`_ZN6sierra8demangleB5cxx11EPKc'
Running the command
nm -gC libstk_util_diag.so.12.1
on the library yielded the following relevant output
U _ZN6sierra8demangleB5cxx11EPKc
GCC uses a predefined preprocessor macro (see below) that defines __GNUC__
== 5.
https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html#Common-Predefined-Macros
This results in no symbol definition for the method 'demangle' in the file
publicTrilinos/src/packages/stk/stk_util/stk_util/diag/StringUtil.cpp
The reason is the following: on line 300 of StringUtil.cpp begins a block
of code in which 'demangle' is defined. It is structured:
#ifdef SIERRA_USE_PLATFORM_DEMANGLER
#if defined(__GNUC__)
#if (__GNUC__ == 3)
#elif(__GNUC__ == 4)
#endif // ends __GNUC__ == 3
#else // begins ifndef __GNUC__
#endif
#else // begins ifndef SIERRA_USE_PLATFORM_DEMANGLER
#endif
If __GNUC__ is defined, then only two options are present: __GNUC__ == 3 or
__GNUC__ == 4. Thus with gcc 5.1 compilers, when __GNUC__ == 5, 'demangle'
is never defined.
As a quick fix, I changed the following two lines of StringUtil.cpp
line 43:
#if __GNUC__ == 3 || __GNUC__ == 4 || __GNUC__ === 5
line 328:
#elif (__GNUC__ == 4 || __GNUC__ == 5)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://trilinos.org/pipermail/trilinos-users/attachments/20150602/9521a3c1/attachment.html>
More information about the Trilinos-Users
mailing list