Différences entre versions de « Compatibilité binaire »
Ligne 21 : | Ligne 21 : | ||
== Questions == | == Questions == | ||
− | === Comment se fait-il qu'un différence the | + | === Comment se fait-il qu'un différence the 4 millièmes de version (2.3.2->2.3.6) puisse occasionner un plantage? === |
− | La libc6 powerpc de etch contient un symbole ''GLIBC_2.3.4 setjmp'': | + | La libc6 powerpc de etch (2.3.6-13) contient un symbole ''GLIBC_2.3.4 setjmp'': |
$ objdump -T /lib/libc.so.6 | grep setjmp | $ objdump -T /lib/libc.so.6 | grep setjmp | ||
Ligne 33 : | Ligne 33 : | ||
00032f80 g DF .text 00000008 (GLIBC_2.0) setjmp | 00032f80 g DF .text 00000008 (GLIBC_2.0) setjmp | ||
− | Mais avec sarge: | + | Mais avec sarge (2.3.2.ds1-22sarge3): |
00032780 g DF .text 00000008 GLIBC_2.0 setjmp | 00032780 g DF .text 00000008 GLIBC_2.0 setjmp | ||
00032668 g DF .text 000000a8 GLIBC_2.0 __sigsetjmp | 00032668 g DF .text 000000a8 GLIBC_2.0 __sigsetjmp | ||
Ligne 41 : | Ligne 41 : | ||
C'est expliqué en détail [http://autopackage.org/docs/devguide/ch07.html#id2529304 ici]. | C'est expliqué en détail [http://autopackage.org/docs/devguide/ch07.html#id2529304 ici]. | ||
+ | |||
+ | La solution préconisée par autopackage est de recompiler avec une vielle libc - donc avec compatibilité arrière. | ||
=== Et comment MS Woe évite-t-il ce problème? === | === Et comment MS Woe évite-t-il ce problème? === |
Version du 25 juin 2006 à 00:40
Le problème: je ne peux pas prendre un paquet testing et l'installer sur stable, dans le cas où si la seule dépendance est la libc.
Reproduction du problème
Configuration: une Debian PPC (cf. Émulation)
- libc6 2.3.2.ds1-22sarge3
- libneon24 0.24.7.dfsg-2
On force l'installation de tla/testing/20060624, ie tla_1.3.3-3_powerpc (Depends: libc6 (>= 2.3.5-1), libneon24 (>= 0.24.7.dfsg), diff (>= 2.8.1), patch (>= 2.5.9), gawk).
dpkg -i --force-all tla_1.3.3-3_powerpc.deb
$ tla --version tla-1.3.3-2 [...] $ tla register-archive http://vcs.patapouf.org/arch/ Registering archive: devel@patapouf.org--patapouf-arch $ tla get devel@patapouf.org--patapouf-arch/gcourrier--mainline--1.0 tla: relocation error: tla: symbol _setjmp, version GLIBC_2.3.4 not defined in file libc.so.6 with link time reference
Questions
Comment se fait-il qu'un différence the 4 millièmes de version (2.3.2->2.3.6) puisse occasionner un plantage?
La libc6 powerpc de etch (2.3.6-13) contient un symbole GLIBC_2.3.4 setjmp:
$ objdump -T /lib/libc.so.6 | grep setjmp 00032f88 g DF .text 00000008 GLIBC_2.3.4 setjmp 00032f90 g DF .text 00000008 (GLIBC_2.0) _setjmp 00032e3c g DF .text 000000a8 (GLIBC_2.0) __sigsetjmp 00032c20 g DF .text 0000021c GLIBC_2.3.4 __sigsetjmp 00032fa0 g DF .text 00000008 GLIBC_2.3.4 _setjmp 00032f80 g DF .text 00000008 (GLIBC_2.0) setjmp
Mais avec sarge (2.3.2.ds1-22sarge3):
00032780 g DF .text 00000008 GLIBC_2.0 setjmp 00032668 g DF .text 000000a8 GLIBC_2.0 __sigsetjmp 00032788 g DF .text 00000008 GLIBC_2.0 _setjmp
Donc en compilant sous etch, on utilise le symbole estampillé "2.3.4" - qui n'est malheureusement pas dans la version de sarge.
C'est expliqué en détail ici.
La solution préconisée par autopackage est de recompiler avec une vielle libc - donc avec compatibilité arrière.
Et comment MS Woe évite-t-il ce problème?
J'aimerais bien le savoir...
Probablement en gelant sa libc et msvcrt.dll.
Autre problème à élucider
- http://lists.dccalliance.org/pipermail/dcc-devel/2005-October/000280.html: backport OpenOffice2 pour DCC.
Liens
- Binary portability, from the Autopackage Packagers Guide
- Linking ilbstdc++ statically: libstdc++ and cascading loading issues explained
- http://www.kernel.org/pub/software/libs/glibc/hjl/compat/