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

Bug#325226: libc6: Wrong dynamic linker on amd64



On 06-Feb-15 12:14, Aurelien Jarno wrote:
> > I have just tested a build with your suggested change, and it works
> > correctly. Please find attached the final version of the patch, against
> > the latest SVN.
> 
> And the patch...

> +++ debian/patches/series.amd64	(copie de travail)
> @@ -1,2 +0,0 @@
> -amd64-lib.diff -p1

> +++ debian/sysdeps/amd64.mk	(copie de travail)
> @@ -18,3 +18,11 @@
>  ln -sf lib debian/$(curpass)/lib64
>  ln -sf lib debian/$(curpass)/usr/lib64
>  endef
> +
> +define libc_extra_install
> +mv debian/tmp-libc/lib64 debian/tmp-libc/lib
> +mv debian/tmp-libc/usr/lib64/* debian/tmp-libc/usr/lib
> +for link in $$(find debian/tmp-libc/usr/lib -type l) ; do ln -sf $$(readlink $$link | sed -e "s#64##g") $$link ; done
> +for so in $$(find debian/tmp-libc/usr/lib -maxdepth 1 -type f -name *.so) ; do perl -pi -e "s#/lib64/#/lib/#g" $$so ; done
> +endef
> +

Hello,

thanks for applying the patch the glibc SVN! I have a heavily used 
amd64 system running with a glibc that has been built with this patch 
and it works fine so far.

However, I also built an amd64 installer image with the 
libc6-udeb package from the patched glibc and this fails 
with the following error message:

/usr/bin/main-menu: error while loading shared libraries: 
libdebconfclient.so.0: cannot open shared object file: No such file or directory

This occurs because the patch changes the default library search path
of the dynamic linker from "/lib /usr/lib" to "/lib64 /usr/lib64".

I found this by doing a

grep lib64 /lib/ld-linux-x86-64.so.2

which fails for the unpatched glibc 2.3.6-1 and succeeds for the 
patched one.

The 'libdebconfclient.so.0' file is installed in /usr/lib and the 
installer does not have a symlink from /usr/lib64 to /usr/lib.
Consequently, the dynamic linker does not find that library.

To fix this, I suggest to add the missing symlink /usr/lib64 -> /usr/lib
to the 'libc6-udeb' package in debian/sysdeps/amd64.mk in a similar
way as it is done for the 'libc6' package.

Additionally, I think that the default library search path of the 
dynamic linker should be changed back to the currently used 
"/lib /usr/lib" because this is where the libraries are really 
installed. But I did not yet find a simple way to achieve this.


I also have two more suggestions for debian/sysdeps/amd64.mk:

-libc_extra_cflags = -O3
+libc_extra_cflags = -O3 -g1
-libc_extra_config_options := $(extra_config_options) --with-tls --with-__thread

The '-g1' was removed from libc_extra_cflags some time ago as a hack 
to avoid a problem with gcc-3.4 which has been fixed in gcc-4.0.

The libc_extra_config_options line can be dropped because the 
'--with-tls' and '--with-__thread' options are the defaults
since glibc version 2.3.5.

Thanks again for your work on the glibc package!

Regards
Andreas Jochens



Reply to: