Page 1 sur 2

Compilation sous GNU/Linux x86_64

Publié : ven. août 26, 2011 4:21 pm
par deap
Bonjour,

J'ai installé avec succès xcas jusqu'au mois de mai-juin de cette année sur archlinux via une compilation traditionnelle en version 0.9.1 et 0.9.2.
Depuis, j'ai changé de PC, toujours en architecture x86_64 et là, impossible de compiler xcas toutes versions 0.9.x, voici la fin de la sortie pour une compilation 0.9.3 (elle est identique pour les versions 0.9.1 et 0.9.2).

Code : Tout sélectionner

/bin/sh ../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -DIN_GIAC -I. -I.. -I. -I..       -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS -MT pari.lo -MD -MP -MF .deps/pari.Tpo -c -o pari.lo pari.cc
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -DIN_GIAC -I. -I.. -I. -I.. -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS -MT pari.lo -MD -MP -MF .deps/pari.Tpo -c pari.cc  -fPIC -DPIC -o .libs/pari.o
pari.cc: In function ‘giac::gen giac::GEN2gen(long int* const&, const vecteur&)’:
pari.cc:267:43: error: ‘lgeflist’ was not declared in this scope
pari.cc: In function ‘long int* giac::gen2GEN(const giac::gen&, const vecteur&, const giac::context*)’:
pari.cc:468:9: error: ‘struct gp_data’ has no member named ‘env’
pari.cc: In function ‘void giac::pari_lift_combine(const vecteur&, const std::vector<giac::dbgprint_vector<giac::gen> >&, giac::gen&, std::vector<giac::dbgprint_vector<giac::gen> >&)’:
pari.cc:582:69: error: ‘combine_factors’ was not declared in this scope
pari.cc: In function ‘giac::gen giac::pari_exec(const string&, const giac::context*)’:
pari.cc:599:9: error: ‘struct gp_data’ has no member named ‘env’
pari.cc: In function ‘giac::gen giac::in_pari(const giac::gen&, const giac::context*)’:
pari.cc:658:9: error: ‘struct gp_data’ has no member named ‘env’
pari.cc:661:11: error: ‘struct gp_data’ has no member named ‘env’
pari.cc:681:25: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
pari.cc:695:30: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
pari.cc:715:37: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
pari.cc:723:34: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
make[2]: *** [pari.lo] Error 1
make[2]: Leaving directory `/home/deap/build/xcas/src/giac-0.9.3/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/deap/build/xcas/src/giac-0.9.3'
make: *** [all] Error 2
==> ERROR: A failure occurred in build().
    Aborting...
Est-ce que quelqu'un aurait un remède à ce problème ?
Un grand merci d'avance !

Re: Compilation sous GNU/Linux x86_64

Publié : ven. août 26, 2011 4:40 pm
par deap
Petite précisions, j'utilise :
- fltk 1.1 ;
- gmp 5.02 ;
- mpfr 3.0.1 ;
- readline 6.2.001 ;
- pari 2.5.0 ;
- gsl 1.15.

Re: Compilation sous GNU/Linux x86_64

Publié : ven. août 26, 2011 6:11 pm
par parisse
Giac n'est pour l'instant pas compatible avec pari 2.5, il faut donc soit installer pari 2.3 soit ajouter a la config --disable-pari

Re: Compilation sous GNU/Linux x86_64

Publié : ven. août 26, 2011 7:03 pm
par deap
Merci pour la réponse ultra-rapide !

Re: Compilation sous GNU/Linux x86_64

Publié : ven. août 26, 2011 8:25 pm
par deap
J'ai ajouté toutes les précisions nécessaires à l'installation sous archlinux : https://aur.archlinux.org/packages.php?ID=30106
La 0.9.2 build sans problème.

Merci encore !

Re: Compilation sous GNU/Linux x86_64

Publié : sam. août 27, 2011 9:02 am
par frederic han
Bonjour,

Le probleme de pari-2.5 se pose maintenant pour freeBSD aussi qui vient d'upgrader pari.

Est ce que ca vaut le coup de modifier le paquet paquet ou bien est ce que la prise en charge de 2.5 est prevue pour bientot?

NB: est ce que le lien ftp
ftp-fourier.ujf-grenoble.fr/xcas/ doit etre definitivement change vers
ftp-fourier.ujf-grenoble.fr/linux/xcas/
?

j'ai aussi l'impression que les sources sont plus recents sur:
http www-fourier.ujf-grenoble.fr/~parisse/giac


Fred

Re: Compilation sous GNU/Linux x86_64

Publié : sam. août 27, 2011 11:26 am
par parisse
salut,

je n'ai aucune idee de quand je pourrai (ou quelqu'un d'autre de bonne volonte?) faire les changements necessaires pour passer a pari 2.5. Je crois que ce n'est pas tres simple car le parser de pari a bien change (on ne peut pas dire que pari 2.5 soit compatible avec pari 2.3 pour le programmeur C).
Pour le ftp, je ne sais pas, je demanderai a notre sysadmin. Et en effet la mise a jour des sources est plus frequente avec le lien http.

Re: Compilation sous GNU/Linux x86_64

Publié : sam. août 27, 2011 2:56 pm
par frederic han
En fait il y a peu d'erreurs:

je n'ai pas regarde la premiere, j'ai donc juste fait:
/*fred case t_LIST:
return t_VEC2gen(G,vars,2,lgeflist(G));*/

celle avec le champ env de GP_DATA qui a disparu. La j'ai tente de remplacer par:

jmp_buf env; //(une def dans chaquefonction) puis
if (setjmp(env)){
tous les // if (setjmp(GP_DATA->env)){


un changement de type const:

687,688c681
< // char * s =i->second->code;
< const char * s =i->second->code;
---
> char * s =i->second->code;


et combine_factors qui n'est plus exporte par pari. J'ai remarque qu'il y en avait un qui ressemblait dans:
basemath/QX_factor.c:combine_factors(GEN target, GEN famod, GEN p, long klim)

si je supprime cet appel dans pari.cc avec les modifications ci dessus, alors giac compile bien, et un petit test sur ifactor, pari(), pari_znorder fonctionnent, pari_factor(100!)

As tu des idees?
Fred

Re: Compilation sous GNU/Linux x86_64

Publié : sam. août 27, 2011 11:24 pm
par frederic han
pour l'instant je ne remarque pas de pb avec les appel depuis xcas de fonctions pari.
Ex: pari_matdet(M) ...

seul pari(2) pose pb:
[Thread debugging using libthread_db enabled]
// Using locale /home/fred/xcas093/share/locale
// [New Thread 0xb5926b70 (LWP 3807)]
*** at top-level: 2()
*** ^---
*** not a function in function call

Program received signal SIGSEGV, Segmentation fault.

mais pari("",2+2) ou pari("gcd",4,6) fonctionnent.

Fred

Re: Compilation sous GNU/Linux x86_64

Publié : dim. août 28, 2011 9:43 am
par parisse
tres encourageant, ca devrait necessiter moins de travail que ce que je craignais!
je regarderai sans doute la semaine prochaine ou en debut de suivante.
a+

Re: Compilation sous GNU/Linux x86_64

Publié : lun. août 29, 2011 4:16 pm
par parisse
je rajoute le traitement des gen de type <_IDNT a part pour eviter l'erreur du 2().
J'ajoute aussi
#ifndef PARI23
#define lgeflist(x) (((long*)(x))[1])
#endif
pour la 1ere erreur, mais je n'ai pas encore teste.
#define PARI23 permettra de compiler avec pari 2.3 (a moins qu'il y ait un define dans pari qui permette de distinguer les 2 versions?).
Je supprime pour l'instant pari_lift_combine avec pari 2.5, de toutes facons NTL le fait.

Re: Compilation sous GNU/Linux x86_64

Publié : lun. août 29, 2011 7:34 pm
par frederic han
NB: il y a maintenant: list_nmax (ca compile aussi avec ca)

cf: http://pari.math.u-bordeaux.fr/pub/pari ... evelop.pdf
page 6

mais vu qu'il disent: Don’t use t_LISTs in pure library mode, il y a peu de risque que giac ait affaire a ca.

Fred

Re: Compilation sous GNU/Linux x86_64

Publié : mar. août 30, 2011 6:43 am
par parisse
merci, je met donc list_nmax, j'aime mieux que de definir une macro.
je rajoute un test de PARI_VERSION_CONTROL<132096 poru savoir si on est en pari 2.3 ou plus.

Re: Compilation sous GNU/Linux x86_64

Publié : mar. août 30, 2011 9:59 am
par frederic han
Ca compile, pari(2) marche
mais pas pari(2+2) ni pari(c=2) (qui font encore 2+2())

il y a aussi le bug suivant:
pari();
ec:=pari_ellinit([0,0,0,2,3]);
pari_elltors(ec) fonctionne et retourne:
[2,[2],[[-1,0]]]
mais
ec:=pari_ellinit([0,0,0,-3,1])
pari_elltors(ec) qui retourne avec pari2.3: [1,[],[]]
donne ici:


Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb56a3b70 (LWP 13796)]
0xb7634583 in t_INT2gen (G=@0xb56a2398, vars=...) at pari.cc:102


Fred

Re: Compilation sous GNU/Linux x86_64

Publié : mar. août 30, 2011 11:17 am
par parisse
je ne sais pas pourquoi, il semble qu'il n'arrive pas a convertir le t_VEC (ou t_COL) en un vecteur giac, plus precisement le 1er argument semble etre de type t_INT mais il y a probablement une erreur de memoire quelque part, parce que sa longueur est de 1 mais setsigne(G,1) plante dessus. A moins que ca ne soit une valeur non modifiable (ce qui expliquerait la difference entre le 1 et le 2, et dans ce cas il faudrait creer une copie en memoire du 1 ou s'affranchir du signe autrement), une idee?
[Edit]
apparamment si on commente les 2 setsigne ca ne plante plus. Reste a savoir si les entiers sont bien convertis!