Re: [DynInst_API:] libcommon.so -> undefined reference to `cplus_demangle'


Date: Tue, 11 Mar 2014 14:13:45 -0500
From: Bill Williams <bill@xxxxxxxxxxx>
Subject: Re: [DynInst_API:] libcommon.so -> undefined reference to `cplus_demangle'
...found the problem(s)!

1) For any packages that are installed in /usr, you shouldn't need to specify their locations to CMake. If you need to do that on our account, something is busted; if you need to do that because of the O|SS build system's vagaries, carry on.

2) We're probably being dumb here, but the convention on git-head is that FOO_LIBRARIES is a directory, and FOO_LIBRARY is a filename. So you'd want /usr/lib64/libiberty.a if you need to specify (e.g. to convince Dyninst to trust you, libiberty is PIC). I will cheerfully take suggestions about better/more standard naming conventions...

--bw

On 03/11/2014 02:03 PM, Jim Galarowicz wrote:
Hi Bill,

In response to your email (thanks Josh and Matt), I think I'm passing in
the correct parameters.
Unless I'm supposed to pass something different than this, below:
              CMakeCache.txt:IBERTY_LIBRARY:FILEPATH=/usr/lib64

I've also attached some of the files from the top level directory.

I'm still seeing an undefined in libcommon.so for cplus_demangle.

[jeg@jeghost lib64]$ nm libcommon.so.8.2.0 | grep mangle
                  U cplus_demangle
000000000002af80 t _Z10dedemanglePcS_
0000000000063b30 T _Z16P_cplus_demanglePKcbb


build.txt is the screen output from the build that has this cmake line:
+ cmake .
-DCMAKE_INSTALL_PREFIX=/home/jeg/OpenSpeedShop_ROOT/BUILDROOT/dyninst-8.2-1.x86_64/opt/krellroot_v2.1u3
-DINSTALL_LIB_DIR=/home/jeg/OpenSpeedShop_ROOT/BUILDROOT/dyninst-8.2-1.x86_64/opt/krellroot_v2.1u3/lib64
-DINSTALL_INCLUDE_DIR=/home/jeg/OpenSpeedShop_ROOT/BUILDROOT/dyninst-8.2-1.x86_64/opt/krellroot_v2.1u3/include/dyninst
-DCMAKE_PREFIX_PATH=/home/jeg/OpenSpeedShop_ROOT/BUILDROOT/dyninst-8.2-1.x86_64/opt/krellroot_v2.1u3
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DLIBDWARF_LIBRARIES=/opt/krellroot_v2.1u3/lib64
-DLIBDWARF_INCLUDE_DIR=/opt/krellroot_v2.1u3/include
-DLIBELF_LIBRARIES=/usr/lib64 -DLIBELF_INCLUDE_DIR=/usr/include
-DPATH_BOOST= -DIBERTY_LIBRARY=/usr/lib64


Thanks,
Jim G

On 03/11/2014 11:51 AM, Josh Stone wrote:
On 03/11/2014 09:18 AM, Matthew LeGendre wrote:
On Tue, 11 Mar 2014, Josh Stone wrote:
For the other option Bill mentioned, set cmake -DUSE_GNU_DEMANGLER=1,
which makes it use abi::__cxa_demangle from libstdc++ instead of
cplus_demangle from libiberty.  I'm not sure of pros/cons either way.
The major con to using g++'s built-in demangler is that it can't
handle binaries produced by the Portland Group Compiler.
OK, I see.  FWIW, binutils and libstdc++ have identical libiberty/
source directories, so all the demangling code is shared.  But only
cplus_demangle has the extra options parameter, which Dyninst uses to
set DMGL_ARM for pgCC.

I wasn't going to bother with libiberty, since we obviously have
libstdc++ already, but this option control seems reason enough.
However, the build doesn't recognize that Fedora/RHEL libiberty.a is
PIC, so it falls back to the download method.  I'll see if that can be
fixed up...

Josh




--
--bw

Bill Williams
Paradyn Project
bill@xxxxxxxxxxx
[← Prev in Thread] Current Thread [Next in Thread→]