snapgear ucfront and uclibc 0.9.28.2 warnings

Hamish Moffatt hamish at cloud.net.au
Mon Feb 26 01:24:18 UTC 2007


Hi,
I'm attempting to use uClibc 0.9.28.2 within the Snapgear linux
development environment.

The library has built ok, but when I link anything I get the following
warning;

hamish at snake:~/project/work/snapgear_dev$ PATH=`pwd`/tools:$PATH ucfront-gcc arm-linux-gcc -msoft-float -mbig-endian test.c
/usr/local/lib/gcc/arm-linux/3.4.4/../../../../arm-linux/bin/ld: warning: ld-uClibc.so.0, needed by /home/hamish/project/work/snapgear_dev/uClibc/lib/libc.so, not found (try using -rpath or -rpath-link)

(where test.c is just "main(){}").

The resulting programs work, but the problem is when a program needs to
link against libdl, eg ppp or python.

hamish at snake:~/project/work/snapgear_dev$ PATH=`pwd`/tools:$PATH ucfront-gcc arm-linux-gcc -msoft-float -mbig-endian test.c -ldl
/usr/local/lib/gcc/arm-linux/3.4.4/../../../../arm-linux/bin/ld: warning: ld-uClibc.so.0, needed by /home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so, not found (try using -rpath or -rpath-link)
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_load_shared_library'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_unmap_cache'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_error_number'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_run_init_array'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_protect_relro'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_run_fini_array'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_symbol_tables'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_find_hash'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_errno'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_loaded_modules'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_map_cache'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_handles'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_debug_addr'
/home/hamish/project/work/snapgear_dev/uClibc/lib/libdl.so: undefined reference to `_dl_fixup'
collect2: ld returned 1 exit status

This appears to be caused by ucfront-gcc's overriding of the gcc default
library paths; the following works:

hamish at snake:~/project/work/snapgear_dev$ arm-linux-gcc -msoft-float -mbig-endian test.c
hamish at snake:~/project/work/snapgear_dev$ arm-linux-gcc -msoft-float -mbig-endian test.c -ldl

Here's the debug output from ucfront-gcc;

hamish at snake:~/project/work/snapgear_dev$ UCFRONT_DEBUG=1 UCFRONT_LOGFILE=/dev/stdout PATH=`pwd`/tools:$PATH ucfront-gcc arm-linux-gcc -msoft-float -mbig-endian test.c
Found base compiler name afer removing myname: arm-linux-gcc
Searching for executable arm-linux-gcc gave /usr/local/bin/arm-linux-gcc
Original: /usr/local/bin/arm-linux-gcc -msoft-float -mbig-endian test.c
Assuming link mode
Final: /usr/local/bin/arm-linux-gcc -nostdinc -idirafter /home/hamish/project/work/snapgear_dev/include -isystem /home/hamish/project/work/snapgear_dev/uClibc/include -isystem /home/hamish/project/work/snapgear_dev/include/gcc -L /home/hamish/project/work/snapgear_dev/lib -L /home/hamish/project/work/snapgear_dev/uClibc/lib /home/hamish/project/work/snapgear_dev/uClibc/lib/crt1.o /home/hamish/project/work/snapgear_dev/uClibc/lib/crti.o /usr/local/lib/gcc/arm-linux/3.4.4/be/soft-float/crtbegin.o -msoft-float -mbig-endian test.c -nostdlib -Wl,--start-group -lc -lgcc -Wl,--end-group /usr/local/lib/gcc/arm-linux/3.4.4/be/soft-float/crtend.o /home/hamish/project/work/snapgear_dev/uClibc/lib/crtn.o
/usr/local/lib/gcc/arm-linux/3.4.4/../../../../arm-linux/bin/ld: warning: ld-uClibc.so.0, needed by /home/hamish/project/work/snapgear_dev/uClibc/lib/libc.so, not found (try using -rpath or -rpath-link)

This is confusing because one of the -L parameters specifically includes the right directory;

hamish at snake:~/project/work/snapgear_dev$ ls -l /home/hamish/project/work/snapgear_dev/uClibc/lib/ld-uClibc*
-rwxr-xr-x 1 hamish hamish 21048 2007-02-26 11:54 /home/hamish/project/work/snapgear_dev/uClibc/lib/ld-uClibc-0.9.28.so
lrwxrwxrwx 1 hamish hamish    19 2007-02-26 11:54 /home/hamish/project/work/snapgear_dev/uClibc/lib/ld-uClibc.so.0 -> ld-uClibc-0.9.28.so

"objdump -p" shows that libc.so.0 needs ld-uClibc.so.0, which wasn't the
case in the original snapgear+uClibc 0.9.27 environment.

I've also built plain vanilla uClibc 0.9.28.2 outside of the snapgear
environment and also found libc.so.0 requires ld-uClibc.so.0. I guess
ucfront-gcc needs adjustment for this change?


Thanks,
Hamish
-- 
Hamish Moffatt VK3SB <hamish at debian.org> <hamish at cloud.net.au>



More information about the uClibc mailing list