Re: question about installation
Brought to you by:
johnston
From: Scott J. <joh...@ve...> - 2002-12-18 20:05:16
|
At 1:24 PM -0600 12/18/02, Michael Prophet () wrote: >On a machine running Linux version 2.4.18-18.7.x, Redhat 7.3, I tried to >install idraw using ivtools-1.0.7.tgz. Following the INSTALL instructions >I did the usual > ./configure > make > su -c "make install" > >and everything seemed to go ok but when I run idraw I get the error: >"/usr/local/bin/idraw: relocation error: /usr/lib/libIV.so: undefined >symbol: __gxx_personality_v0" > >any suggestions? > >Mike > I assume you are using gcc-2.96. For a long time I avoided making ivtools compile with that version of gcc, which was never approved by the gcc steering committee, and is only distributed by RedHat. But recently I fixed the compile problems as you've demonstrated, without, I guess, resolving all the run-time resolution of symbols. The easiest thing to do might be to upgrade to a gcc-3.* compiler. Otherwise we can engage in a search mission to discover why __gxx_personality_v0 is referenced by libIV but not resolved from any linked library. The usual reason is __gxx_personality_v0 is defined in a system include file (a gcc system include file, given the name), yet is not compiled into a system library (at least the ones you are resolving given your use of ldconfig and the LD_LIBRARY_PATH environment variable). You can look in a few places for that symbol, either /usr/include or the directory revealed when you type "gcc -v". Use the find command like so: # first cd to the pertinent directory find . -type f -exec grep -l gxx_personality_v0 {} \; That should find where the symbol is hiding. Other possibilities are the symbol is automatically inserted into the object code by the compiler. To get an idea of where the symbol is referenced from libIV, try this (assuming use of sh or bash): cd src/IV/LINUX for x in *.o > do > echo $x > nm $x | grep gxx_personality_v0 > done Now armed with this information, you probably want to determine if a) that symbol is nowhere to be found in a system library, or b) that symbol exists in a system library, but you are not linking that library. To search for libraries, go to /usr/lib and that directory revealed by "gcc -v" and try this: for x in `find . -name \*.a -print` > do > echo $x > nm $x | grep gxx_personality_v0 > done and repeat for \*.so\* (instead of \*a) to search the dynamic libraries as well. That should give you some idea of whether the symbol is out there. If it is, study your current set of dynamically linked libraries with the use of "ldd -r" on your executable. If it isn't you'll need to go the original source file which references that symbol and recompile it with the -E argument, then study the output of the preprocessor to see what include file inserted it. Then consult back here for advice on how to solve it. These are the secrets to resolving loss of run-time symbols, a handy tool when keeping up with RedHat :-) Happy Holidays. Scott Johnston http://www.ivtools.org |