Re: [DynInst_API:] Cannot link to dyninst 8.0 on Ubuntu


Date: Sat, 23 Feb 2013 14:39:08 -0600
From: Andrew Bernat <bernat@xxxxxxxxxxx>
Subject: Re: [DynInst_API:] Cannot link to dyninst 8.0 on Ubuntu


On Feb 23, 2013, at 12:17 PM, mkfs <semper.non.sequitur@xxxxxxxxx> wrote:

When linking to libdyinst on Ubuntu (12.04 64-bit), the BPatch
constructor is not found, and the destructor has unresolved symbols:

bash$ g++ -Wall -I/usr/include/dyninst -L/usr/lib -ldyninstAPI
-lcommon dyninst_test.cpp

Try reordering the compilation line to put your source file first and the libraries second. The Ubuntu linker is a single-pass system and so things need to be specified in dependence order. 

bash$ nm /usr/lib/libdyninstAPI.so | grep -e 'BPatch[0-9]\+BPatch'
00000000000f0790 T _ZN6BPatch11BPatch_dtorEv
bash$ nm /usr/lib/libdyninstAPI.so | grep -e 'BPatch[0-9]\+bpatch_printf'
bash$

The 8.0 version of Dyninst uses a global locking system implemented in a header file, so I'd expect those symbols to be missing. It's confusing but works. 

...although it should be noted that the same error happened without
the "--enable-gnu-demangler" flag. The '--with-libdwarf-static' flag
is necessary to fix the following error when linking to libdwarf on a
64-bit system "relocation R_X86_64_32S against `.rodata' can not be
used when making a shared object"

Are you building libdwarf from source or using the package? I believe the package just provides a .a, which you wouldn't be able to link dynamically. 

Drew


Given that this happens both with the .deb files and a build from the
tarball, it seems to be a problem with the Ubuntu build (possibly on
64-bit systems) -- or else I am doing something fundamentally wrong
when trying to compile against it.

Has anyone successfully linked to dyninst 8.0 on a 64-bit Ubuntu 12.04
(or greater) system, and if so, how?

System info:

bash$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.2 LTS
Release:        12.04
Codename:       precise
bash$ uname -a
Linux glider 3.5.0-18-generic #29-Ubuntu SMP Thu Oct 25 07:26:14 UTC
2012 x86_64 x86_64 x86_64 GNU/Linux

bash$ g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

bash$ ldd --version
ldd (Ubuntu EGLIBC 2.15-0ubuntu10.3) 2.15
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.


The test code, cat dyninst_test.cpp, is as follows:

bash$ cat dyninst_test.cpp
using namespace std;
// no such namespace:
//using namespace Dyninst;

#include "BPatch.h"
BPatch bpatch;
int main(int argc, char ** argv) {
       // this doesn't work either:
//BPatch * bpatch = new BPatch();
//if (!bpatch) return -1;
return 0;
}
_______________________________________________
Dyninst-api mailing list
Dyninst-api@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api




[← Prev in Thread] Current Thread [Next in Thread→]