signal SIGABRT

Librairie C++ de calcul formel/ C++ symbolic computation library

Modérateur : xcasadmin

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

signal SIGABRT

Message par cdeval » mer. mai 05, 2010 9:09 pm

Encore moi !
Linux, c'est pas drôle quand chacun y va de sa distrib perso : je tombe par hasard sur un bug sur mon eeepc équipé de OOo packagé par ubuntu 10.04
Je lui demande "simplifier(x+2x)" et je tombe sur :

Code : Tout sélectionner

Program received signal SIGABRT, Aborted.
0x00e48422 in __kernel_vsyscall ()
(gdb) bt
#0  0x00e48422 in __kernel_vsyscall ()
#1  0x0013a651 in raise () from /lib/tls/i686/cmov/libc.so.6
#2  0x0013da82 in abort () from /lib/tls/i686/cmov/libc.so.6
#3  0x0017149d in ?? () from /lib/tls/i686/cmov/libc.so.6
#4  0x0017b591 in ?? () from /lib/tls/i686/cmov/libc.so.6
#5  0x0017cde8 in ?? () from /lib/tls/i686/cmov/libc.so.6
#6  0x0017fecd in free () from /lib/tls/i686/cmov/libc.so.6
#7  0x00594bcd in rtl_freeMemory ()
   from /usr/lib/openoffice/program/../basis-link/ure-link/lib/libuno_sal.so.3
#8  0x08048e71 in operator delete(void*) ()
#9  0x009e78f3 in std::vector<int, std::allocator<int> >::~vector() () from /usr/lib/libgraphite.so.3
#10 0xafe6c5c9 in giac::sym2rmul(__gnu_cxx::__normal_iterator<giac::gen const*, std::vector<giac::gen, std::allocator<giac::gen> > >, __gnu_cxx::__normal_iterator<giac::gen const*, std::vector<giac::gen, std::allocator<giac::gen> > >, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, int, giac::gen&, giac::gen&, giac::context const*) ()
   from /home/devs/.openoffice.org/3/user/uno_packages/cache/uno_packages/f2yoyA_/CmathOOoCAS.oxt/Linux_x86/libgiac.so.0
#11 0xafe6e6a8 in giac::sym2r(giac::symbolic const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, int, giac::gen&, giac::gen&, giac::context const*) ()
   from /home/devs/.openoffice.org/3/user/uno_packages/cache/uno_packages/f2yoyA_/CmathOOoCAS.oxt/Linux_x86/libgiac.so.0
#12 0xafe70c61 in giac::sym2r(giac::gen const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, giac::dbgprint_vector<giac::gen> const&, int, giac::gen&, giac::gen&, giac::context const*) ()
   from /home/devs/.openoffice.org/3/user/uno_packages/cache/uno_packages/f2yoyA_/CmathOOoCAS.oxt/Linux_x86/libgiac.so.0
etc...
je vais regarder plus en détail en installant une version debug de libgiac, mais si déjà avec ça tu as une idée...
Sur le même eeepc, xcas n'a pas ce problème (avec la même libgiac !).
De plus, ce plantage n'apparaît pas sur mon linux32 équipé de OOo officiel provenant de OpenOffice.org.
Ça semble donc être lié à OOo-ubuntu lui-même. J'espère que chaque distrib ne va pas apporter son lot de bugs ! Là je fais un effort parce que j'aime bien ubuntu et que cet OOo va être plutôt répandu !
Je te tiens au courant de la suite du debug, A+

parisse
Messages : 5744
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: signal SIGABRT

Message par parisse » jeu. mai 06, 2010 10:47 am

desole, mais le traceback ne me donne aucune piste.

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Re: signal SIGABRT

Message par cdeval » jeu. mai 06, 2010 12:15 pm

Pas grave, le fait que tu ne saches pas est déjà une information pour moi !
En recoupant les infos que le responsable des composants uno chez OOo m'a donné (ci-dessous) et les tests que j'ai faits, j'ai compris qu'il s'agissait d'un problème de version de compilateur.
J'ai mis dans mon eeepc la libgiac que j'ai compilé moi-même (celle qui ne fonctionne pas sans manipulation dans OOo-officiel) et ça marche tout seul. Giac n'y est donc pour rien :D
Je pense que l'explication est la suivante :
selon http://wiki.services.openoffice.org/wik ... _engineers :
OOo-officiel est compilé sur GCC 4.2.3, ce qui explique les librairies plutôt vieilles distribuées avec OOo et que ta libgiac fonctionne mais pas la mienne compilée avec GCC 4.4.1
OOo-Ubuntu 10.04 est compilé avec GCC 4.4.3, ce qui explique que ta libgiac provoque quelques erreurs à l'exécution (mais mon extension s'installe toutefois) et que la mienne passe bien.

Bilan : je ne vais quand même pas maintenir deux versions de mon extension !
Je vais soumettre ce petit casse-tête sur la liste de diffusion pour avoir leur avis.
La solution ne passerait-t-elle pas par une compilation statique de libgiac en ce qui concerne la libstdc++ récente plus éventuellement d'autres vieilles librairies fournies par OOo ?
A+ et merci encore pour ta disponibilité.

ci-joint la réponse du patron des composants uno :
<http://udk.openoffice.org/common/man/dr ... ility.html> discusses this. OOo bundles the libstdc++ it itself is built with (as it cannot be expected to be available on a given machine OOo is installed to), and OOo is built with a rather old, baseline tool chain (so it runs on a wide variety of machines; see <http://wiki.services.openoffice.org/wik ... _engineers>).

libstdc++ has moved forward in a compatible way for quite some time now (see <http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html>), and it would theoretically be possible that OOo bundles the most recent one, but it doesn't.

For maximum portability, you would have to build your extension with the same tool chain with which the lowest OOo version your extension should work with is built.

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Re: signal SIGABRT

Message par cdeval » ven. mai 07, 2010 2:13 pm

J'ai cherché pas mal.
Une solution pourrait être de recompiler libgiac pour inclure en statique libgcc et libstdc++.
Cela permettrait à mon extension de ne pas faire appel à celles de OOo.
Pour libgcc, j'ai vu qu'il suffisait d'ajouter l'option -static-libgcc à gcc mais pour libstdc++, j'ai essayé de linker avec libstdc++.a puis avec libstdc++_pic.a mais sans succès (erreurs ou compil mais dépendance dynamique toujours là avec ldd).
Verrais-tu un moyen de faire cela ?

Si ce n'est pas possible, comme je ne m'en sors pas, je crois que je vais compiler libgiac et mon extension avec gcc-4.4.1, ce qui me permettra d'installer et de fonctionner sans soucis sur OOo-Ubuntu et indiquer la marche à suivre (suppression des vieilles libgcc et libstdc++ fournies par OOo) pour les OOo compilés avec un gcc plus ancien. Cela assurera une homogénéité de compilation entre OOo-ubuntu et mon extension, comme le préconise les développeurs de OOo. Ce sera un moindre mal car pour le moment, mon addin s'installe mais ne fonctionne pas sur OOo-ubuntu ce qui me gêne pas mal.
bon week end !

parisse
Messages : 5744
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: signal SIGABRT

Message par parisse » ven. mai 07, 2010 2:28 pm

pour la libstdc++, il faut peut-etre compiler avec gcc et non g++ en ajoutant libstdc++.a. Je n'ai jamais essayé...
Et pourquoi pas carrément supprimer les vieilles libs de la distro de OO. Je dois pouvoir ajouter ça dans le script postinst de l'install du package debian, il suffit de connaitre le chemin exact.

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Re: signal SIGABRT

Message par cdeval » ven. mai 07, 2010 2:43 pm

OK, je vais essayer de demander de l'aide sur le forum gcc

pour le package debian, je n'avais jamais pensé à ça.
Pourquoi pas, je vais réfléchir (je pars en week end dans 1 heure, je vais avoir le temps...)
A+

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Re: signal SIGABRT

Message par cdeval » lun. mai 10, 2010 12:34 pm

J'ai résolu tous mes problèmes !
En fait c'était (assez) simple :
sur mes ubuntu 32 et 64, j'ai installé gcc et g++ 4.2 (qui correspondent aux versions de libstdc++ et libgcc fournies par OOo compilé par SUN) à côté des versions 4.4 qui sont installées par défaut.
J'ai changé les liens gcc et g++ pour pointer vers ces versions plus anciennes.
J'ai recompilé libgiac en enlevant le "-g" et, c'était déjà bon signe, mon extension tournait sans problème sans aucun changement dans OOo.
J'en ai profité pour recompiler aussi mon CmathOOoCAS.uno.so histoire d'avoir la même version du compilateur pour toute la chaine : OOo-CmathOOoCAS-ligbiac.
J'étais maintenant homogène.
Ensuite, j'ai balancé mon extension 32bits sur mon eeepc, sans rien changer au OOo-Ubuntu compilé avec gcc-4.4.3, j'ai croisé les doigts, et c'est passé sans problème :D :D :D
Je pense que le plantage que j'avais était dû à la libgiac que tu dois compiler avec une version vraiment ancienne (peut-être même gcc-3.x ?) et qui n'est pas du tout compatible avec libstdc++ provenant de gcc-4.4.x.

Quoiqu'il en soit, je suis bien content, j'ai compris des tas de choses et réglé ce problème.
Aucune bidouille à faire, mon extension est la même pour tous les OOo puisque je l'ai recompilée avec la version de gcc la plus basse possible pour OOo 3.2.

Allez, cette fois, je clos ce sujet :D
merci encore de ton aide.

Répondre