Re: Why cannot insert Dynamic Linker path?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Samson Luk <samsonluk@xxxxxxxxx> writes:

> I've alternate sysroot installed in my system and I alway use the
> following gcc command to insert alternate dynamic linker path to new
> compiled binary:
>
> $ gcc -O2 -Wl,-rpath=/usr/lib/cs2010q1/lib:/usr/lib/cs2010q1/usr/lib
> -Wl,--dynamic-linker=/usr/lib/cs2010q1/lib/ld-linux.so.3 main.c -o
> main
>
> $ ldd main
>         libgcc_s.so.1 => /usr/lib/cs2010q1/lib/libgcc_s.so.1 (0x40028000)
>         libc.so.6 => /usr/lib/cs2010q1/lib/libc.so.6 (0x4003b000)
>         /usr/lib/cs2010q1/lib/ld-linux.so.3 (0x40000000)
>
> However, I found '-Wl,--dynamic-linker' seems no effect for create
> dynamic link shared library, it doesn't insert the dynamic linker path
> to the final .so:
>
> $ gcc   -shared -O2
> -Wl,-rpath=/usr/lib/cs2010q1/lib:/usr/lib/cs2010q1/usr/lib
> -Wl,--dynamic-linker=/usr/lib/cs2010q1/lib/ld-linux.so.3
> -L/usr/lib/cs2010q1/lib -L/usr/lib/cs2010q1/usr/lib -L/opt/lib
> -L/opt/lib/gcc/arm-none-linux-gnueabi/4.4.3 -L/usr/local/lib
> -L/usr/local/BerkeleyDB.4.2/lib -fno-stack-protector JP.o cp_00_t.o
> eu_01_t.o ji_02_t.o ji_03_t.o ji_04_t.o ma_05_t.o sh_06_t.o  -o JP.so
>
> $ ldd JP.so
>         libgcc_s.so.1 => /usr/lib/cs2010q1/lib/libgcc_s.so.1 (0x40132000)
>         libc.so.6 => /usr/lib/cs2010q1/lib/libc.so.6 (0x40145000)
>         /lib/ld-linux.so.3 (0x2a000000)
>
> as you can see the JP.so only have the /lib/ld-linux.so.3 instead of
> the /usr/lib/cs2010q1/lib/ld-linux.so.3 as the dynamic linker path.
> Appreciate for your suggestion on how to fix this problem. I am using
> gcc 4.4.3 in arm-linux 2.6.16

The --dynamic-linker option sets the contents of the PT_INTERP segment
in an executable.  There is no PT_INTERP segment in a shared library, so
the option is silently ignored.

It does not make sense to set the dynamic linker for a shared library,
because that shared library has to be loaded by something, and in
particular it has to be loaded by some dynamic linker.  In other words,
by the time the shared library is loaded, the dynamic linker is already
running.  There is no point to storing a dynamic linker in a shared
library, because it will never be used.

Ian


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux