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: