Dynamic Linking
Jeffrey R. Millar
jmillar at transcept.com
Wed Jan 19 02:00:40 EST 2000
Here's a script to test the type of library used by a program. It was
written by an engineer here at Transcept. I'll let him take credit
personally
if he wants to.
jeff
#!/bin/sh
if test $# = 0; then
echo Usage: xfile FILE ...
exit
fi
for i in "$@"; do
echo -n "$i: "
if test -f "$i"; then
:
else
echo "doesn't exist"
continue
fi
if file "$i" 2>&1 | grep -q "dynamically linked"; then
echo -n "Dynamically linked "
elif file "$i" 2>&1 | grep -q "statically linked"; then
echo -n "Statically linked "
else
echo "Not an executable"
continue
fi
if readelf -S "$i" 2>&1 | grep -q "\.note\.ABI-tag";
then
echo "with GNU Libc 2"
else
echo "with old Libc"
fi
done
> ----- Original Message -----
> From: "Grant Carter" <gcarter at eng.uct.ac.za>
> To: "linuxppc-embedded" <linuxppc-embedded at lists.linuxppc.org>
> Sent: Monday, January 17, 2000 9:23 AM
> Subject: Dynamic Linking
>
> >
> > Hi
> >
> > I have been following the thread "Cross-compile Applications for 860
> on
> > x86" and am running into similar problems. I have tried the
> solutions
> > that have been suggested but have had no success. Perhaps those
> > concerned have had private email conversations in which the solution
> has
> > been found, but since I cannot find one in the archives that helps
> me,
> > I'll post this question. Apologies for its length.
> >
> > I am trying to get a hello world up and running using dynamically
> linked
> > libraries. The statically linked version works fine, so I presume
> that
> > the libraries are all fine. I am using linux-2.2.13 with no kernel
> > floating point support, but all the libraries and executables are
> > compiled with -msoft-float. I am using SASH-2.1 and it works fine.
> My
> > problem is that whenever I run something that I have compiled with
> the
> > dynamic linker, it exits on Signal 11.
> >
> > I have made sure that LD_LIBRARY_PATH is set to /lib (it seems that
> I
> > had to do this even though all my libraries are in /lib as without
> it I
> > get a
> >
> > ./hello: error in loading shared libraries: libc.so.6: cannot open
> > shared object file: No such file or directory
> >
> > Doing a "strings" on the file shows that it is looking in /lib for
> > ld.so.1.)
> >
> > ---------------------------------
> > >powerpc-linux-strings hello
> > /lib/ld.so.1
> > __gmon_start__
> > libc.so.6
> > printf
> > _IO_stdin_used
> > __libc_start_main
> > GLIBC_2.0
> > }a[xN
> > Grant was here!
> > -----------------------------------
> >
> > Anyhow, once the LD_LIBRARY_PATH has been set, the libraries are
> loaded
> > (or so it seems) Now everything that I run exits with Signal 11. I
> used
> > objdump -p on the main executable and saw that it required
> libc.so.6.
> > This exists in my /lib directory
> > -----------------------------------
> > >powerpc-linux-objdump -p hello
> >
> > hello: file format elf32-powerpc
> >
> > <snip>
> >
> > Dynamic Section:
> > NEEDED libc.so.6
> > INIT 0x100003c8
> > FINI 0x100003ec
> > HASH 0x10000150
> > STRTAB 0x100001c8
> > SYMTAB 0x10000178
> > STRSZ 0x42
> > SYMENT 0x10
> > DEBUG 0x0
> > PLTGOT 0x100104f8
> > PLTRELSZ 0x18
> > PLTREL 0x7
> > JMPREL 0x10000240
> > RELA 0x10000240
> > RELASZ 0x18
> > RELAENT 0xc
> > VERNEED 0x10000220
> > VERNEEDNUM 0x1
> > VERSYM 0x10000214
> >
> > Version References:
> > required from libc.so.6:
> > 0x0d696910 0x00 02 GLIBC_2.0
> > -----------------------------------
> >
> > Doing the same thing on libc.so.6, I get the following:
> >
> > -----------------------------------
> > >powerpc-linux-objdump -p libc.so.6
> >
> > libc.so.6: file format elf32-powerpc
> >
> > Program Header:
> > <snip>
> >
> > Dynamic Section:
> > NEEDED ld.so.1
> > SONAME libc.so.6
> > INIT 0x21cb8
> > FINI 0xe0fc8
> > HASH 0xf4
> > STRTAB 0x9d0c
> > SYMTAB 0x2cdc
> > STRSZ 0x7ca2
> > SYMENT 0x10
> > PLTGOT 0x103a9c
> > PLTRELSZ 0x150c
> > PLTREL 0x7
> > JMPREL 0x204d8
> > RELA 0x128c4
> > RELASZ 0xf2dc
> > RELAENT 0xc
> > VERDEF 0x127e0
> > VERDEFNUM 0x5
> > VERNEED 0x12884
> > VERNEEDNUM 0x1
> > VERSYM 0x119da
> >
> > Version definitions:
> > 1 0x01 0x0865f4e6 libc.so.6
> > 2 0x00 0x0d696910 GLIBC_2.0
> > 3 0x00 0x0d696911 GLIBC_2.1
> > GLIBC_2.0
> > 4 0x00 0x09691f71 GLIBC_2.1.1
> > GLIBC_2.1
> > 5 0x00 0x09691f72 GLIBC_2.1.2
> > GLIBC_2.1.1
> >
> > Version References:
> > required from ld.so.1:
> > 0x09691f71 0x00 08 GLIBC_2.1.1
> > 0x0d696911 0x00 07 GLIBC_2.1
> > 0x0d696910 0x00 06 GLIBC_2.0
> > -----------------------------------
> >
> > And now for ld.so.1
> >
> > -----------------------------------
> > >powerpc-linux-objdump -p ld.so.1
> >
> > ld.so.1: file format elf32-powerpc
> >
> > Program Header:
> > <snip>
> > Dynamic Section:
> > SONAME ld.so.1
> > HASH 0x94
> > STRTAB 0x838
> > SYMTAB 0x2f8
> > STRSZ 0xcfc
> > SYMENT 0x10
> > PLTGOT 0x25fd4
> > PLTRELSZ 0x12c
> > PLTREL 0x7
> > JMPREL 0x2ab0
> > RELA 0x167c
> > RELASZ 0x1560
> > RELAENT 0xc
> > VERDEF 0x15fc
> > VERDEFNUM 0x4
> > VERSYM 0x1554
> >
> > Version definitions:
> > 1 0x01 0x0275a261 ld.so.1
> > 2 0x00 0x0d696910 GLIBC_2.0
> > 3 0x00 0x0d696911 GLIBC_2.1
> > GLIBC_2.0
> > 4 0x00 0x09691f71 GLIBC_2.1.1
> > GLIBC_2.1
> > -----------------------------------
> >
> > So in summary, it seems that I have all of the required libraries
> > (ld.so.1 and libc.so.6) in the right place (/lib) as pointed to my
> > LD_LIBRARY_PATH and still I get a Signal 11 exit when trying to run
> it.
> >
> > Any ideas would be greatly appreciated.
> >
> > Regards
> > Grant
> >
> > --
> > Grant Carter gcarter at eng.uct.ac.za
> > Department of Electrical Engineering University of Cape Town
> > Tel: +27 (0)21 650-3467 Fax: +27 (0)21 650-3465
> > "Coffee not found - operator halted!"
> >
> >
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list