Hi,
On Mon, 6 Dec 1999, Dirk Meier wrote:
>
> Hi Rooters,
>
> I installed `root_v2.23.Linux.2.2.3.egcs111.tar.gz'
> and I have a problem linking the examples in $ROOTSYS/test
>
>
>
> The symptons are:
>
> > make
> g++ -shared -g Event.o EventDict.o -o libEvent.so
> g++ -g MainEvent.o Event.o EventDict.o -L/usr/ROOT/root/lib -lNew -lCore
> -lCint -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix
> -lPhysics -lm -ldl -rdynamic -o Event
> MainEvent.o: In function `main':
> MainEvent.o(.text+0x271): undefined reference to `TFile::TFile(char const
> *, char const *, char const *, int)'
> MainEvent.o(.text+0x4e8): undefined reference to `TFile::TFile(char const
> *, char const *, char const *, int)'
> MainEvent.o(.text+0x5b8): undefined reference to
> `TDirectory::TDirectory(char const *, char const *, char const *)'
> collect2: ld returned 1 exit status
> make: *** [Event] Error 1
>
>
> I am on a linux RedHat 5.2 system
>
> > less /proc/version
> Linux version 2.0.36 (root@porky.redhat.com) (gcc version 2.7.2.3) #1 Tue
> Oct 13 22:17:11 EDT 1998
I faced with analagous problem. I had several undefined refrences in linking
time. One of this undefined symbols was
TTree::Scan(char const *, char const *, char const *, int, int)
But 'nm' command under linux reported that this symbol presented both in
library $ROOTSYS/lib/libTree.so and my object file:
$ nm -C $ROOTSYS/lib/libTree.so
0004dba8 T TTree::Scan(char const *, char const *, char const *, int, int)
$ nm -C myobject.o
U TTree::Scan(char const *, char const *, char const *, int, int)
The key point was to skip option '-C' (that produces C++ names). After that:
$ nm $ROOTSYS/lib/libTree.so
0004dba8 T Scan__5TTreePCcT1PCcii
$ nm myobject.o
U Scan__5TTreePCcN21ii
You see that these are different symbols. The reason of this difference is
simple: I used gcc-2.95 compiler (latest gcc version) but root was
compiled with another version of gcc (or egcs). And the algorithm for
C++ names creation has changed a bit.
How to solve the problem? Either use the same compiler as it was used in
compiling ROOT binaries, or recompile ROOT from source by your compiler.
But at first check: do your object file and library libCore.so have the same
name for TFile::TFile(char const *, char const *, char const *, int) or
not. In my ROOT version (compiled with gcc-2.95.2) the name is
000adaa0 T __5TFilePCcN21i
^^^^^^^^^^^^^^^
With best wishes,
Alexander.
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:44 MET