mingw32

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

Modérateur : xcasadmin

Répondre
frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

mingw32

Message par frederic han » jeu. août 15, 2013 8:05 pm

Salut,

j'essaye de (cross) compiler giac 1.1 avec

./configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32

(mis a part deux petits ennuis (global.h et first.h): wince replacement not found
et gammaf inconnus)) que j'ai vire, ca compile jusque la:

Code : Tout sélectionner

/bin/bash ../libtool --tag=CXX   --mode=compile i686-w64-mingw32-g++ -DHAVE_CONFIG_H -I. -I..  -DIN_GIAC -I. -I.. -I. -I..       -g -O2 -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS -MT maple.lo -MD -MP -MF .deps/maple.Tpo -c -o maple.lo maple.cc
libtool: compile:  i686-w64-mingw32-g++ -DHAVE_CONFIG_H -I. -I.. -DIN_GIAC -I. -I.. -I. -I.. -g -O2 -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS -MT maple.lo -MD -MP -MF .deps/maple.Tpo -c maple.cc  -DDLL_EXPORT -DPIC -o .libs/maple.o
maple.cc: In function ‘giac::gen giac::_open(const giac::gen&, const giac::context*)’:
maple.cc:823:16: erreur: ‘O_RDWR’ was not declared in this scope
maple.cc:823:25: erreur: ‘O_CREAT’ was not declared in this scope
maple.cc:823:35: erreur: ‘O_TRUNC’ was not declared in this scope
maple.cc:823:45: erreur: ‘O_APPEND’ was not declared in this scope
make: *** [maple.lo] Erreur 1
as tu une idee?
(pour l'instant je n'ai installe que gmp)

(j'essaye de compiler qcas avec la libgiac pour windows, ca me semble plus simple (en tout cas mieux documente) avec mingw32+QT)

Merci

Fred

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

Re: mingw32

Message par parisse » ven. août 16, 2013 5:18 pm

salut,
bizarre que tu aies cette erreur, car il y a un test de define avec MINGW juste avant. Essaie de rajouter le define correspondant dans config.h pour voir. Sinon, tu peux t'inspirer de
http://www-fourier.ujf-grenoble.fr/~par ... giac32.tgz
Ce serait super que tu arrives a compiler pour windows le module python! De mon cote, je n'ai pas les outils avec moi avant mon retour a la fac debut septembre...

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: mingw32

Message par frederic han » sam. août 17, 2013 9:51 pm

Bon j'ai deja reussi a compiler qcas (et aussi libqcas.a) sous mingw32 avec une libgiac ayant: pthread,gmp,mpfr,gsl.
l'archive est la:
http://www.math.jussieu.fr/~han/xcas/qcas

Effectivement le ./configure --host=i686-w64-mingw32 ne definit pas __MINGW_H

en le definissant dans config.h j'ai eu les ennuis suivant:

les "small" du nouveau code de grobner dans cocoa.cc et solve.cc sont en conflit avec un autre "small" j'ai donc remplace tous les "small" par autre chose dans ces 2 fichiers.

dans global.cc (giac 1.1 stable)
ligne 867:

#ifdef HAVE_LIBPTHREAD
//fred ,eval_thread(0),stackaddr(0)
,eval_thread(),stackaddr(0) //fred MINGW_H
#endif

pour giacpy je ne sais pas encore trop ce qu'il faut faire.
Fred

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

Re: mingw32

Message par parisse » dim. août 18, 2013 7:57 am

tu veux dire les variables booleennes small ou d'autres variables/types?
le mieux serait de les renommer en giacsmall

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: mingw32

Message par frederic han » dim. août 18, 2013 11:53 am

les small tout court de cococa.cc et solve.cc et pas les smallpos ni smaltd ...

Ex: tdeg_t small,cur

oui il suffit de leur donner un autre nom et ca marche.

Fred

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: mingw32

Message par frederic han » dim. nov. 10, 2013 8:21 am

J'ai encore des problemesavec small et mingw voici les patch que j'applique:
pour solve.cc

Code : Tout sélectionner

4916c4916
<       index_t small,cur;
---
>       index_t small0,cur;
4923c4923
<       index_lcm(res[B[smallpos].first].coord.front().index,res[B[smallpos].second].coord.front().index,small);
---
>       index_lcm(res[B[smallpos].first].coord.front().index,res[B[smallpos].second].coord.front().index,small0);
4930c4930
< 	    || (curtd==smalltd && res.front().is_strictly_greater(small,cur))
---
> 	    || (curtd==smalltd && res.front().is_strictly_greater(small0,cur))
4933c4933
< 	  swap(small,cur); // small=cur;
---
> 	  swap(small0,cur); // small0=cur;
et pour cocoa.cc

Code : Tout sélectionner

1228c1228
<     bool small=env && env->moduloon && env->modulo.type==_INT_ && env->modulo.val;
---
>     bool small0=env && env->moduloon && env->modulo.type==_INT_ && env->modulo.val;
1235c1235
< 	if (small)
---
> 	if (small0)
1255c1255
< 	if (small)
---
> 	if (small0)
1281c1281
<       if (small){
---
>       if (small0){
1755c1755
<     bool small=env && env->moduloon && env->modulo.type==_INT_ && env->modulo.val;
---
>     bool small0=env && env->moduloon && env->modulo.type==_INT_ && env->modulo.val;
1772c1772
< 	// if (small) TMP1.coord.push_back(*pt);
---
> 	// if (small0) TMP1.coord.push_back(*pt);
1776c1776
<       if (small){
---
>       if (small0){
1819c1819
<       // if (small) swap(rem.coord,TMP1.coord);
---
>       // if (small0) swap(rem.coord,TMP1.coord);
1858c1858
<     // if (small) swap(p.coord,TMP1.coord);
---
>     // if (small0) swap(p.coord,TMP1.coord);
1992c1992
<     bool small=env && env->moduloon && env->modulo.type==_INT_ && env->modulo.val;
---
>     bool small0=env && env->moduloon && env->modulo.type==_INT_ && env->modulo.val;
1998c1998
< 	if (small)
---
> 	if (small0)
2026c2026
<       tdeg_t small,cur;
---
>       tdeg_t small0,cur;
2034c2034
<       index_lcm(res[B[smallpos].first].coord.front().u,res[B[smallpos].second].coord.front().u,small,order);
---
>       index_lcm(res[B[smallpos].first].coord.front().u,res[B[smallpos].second].coord.front().u,small0,order);
2036c2036
< 	smallsugar=res[B[smallpos].first].sugar+(small-res[B[smallpos].first].coord.front().u).total_degree();
---
> 	smallsugar=res[B[smallpos].first].sugar+(small0-res[B[smallpos].first].coord.front().u).total_degree();
2047c2047
< 	  doswap=tdeg_t_strictly_greater(small,cur,order);
---
> 	  doswap=tdeg_t_strictly_greater(small0,cur,order);
2052c2052
< 	    doswap=tdeg_t_strictly_greater(small,cur,order);
---
> 	    doswap=tdeg_t_strictly_greater(small0,cur,order);
2056c2056
< 	  swap(small,cur); // small=cur;
---
> 	  swap(small0,cur); // small0=cur;
2759c2759
< 	// if (small) TMP1.coord.push_back(*pt);
---
> 	// if (small0) TMP1.coord.push_back(*pt);
2860c2860
<     // if (small) swap(p.coord,TMP1.coord);
---
>     // if (small0) swap(p.coord,TMP1.coord);
2887c2887
< 	// if (small) TMP1.coord.push_back(*pt);
---
> 	// if (small0) TMP1.coord.push_back(*pt);
3168c3168
<       tdeg_t small,cur;
---
>       tdeg_t small0,cur;
3176c3176
<       index_lcm(res[B[smallpos].first].coord.front().u,res[B[smallpos].second].coord.front().u,small,order);
---
>       index_lcm(res[B[smallpos].first].coord.front().u,res[B[smallpos].second].coord.front().u,small0,order);
3178c3178
< 	smallsugar=res[B[smallpos].first].sugar+(small-res[B[smallpos].first].coord.front().u).total_degree();
---
> 	smallsugar=res[B[smallpos].first].sugar+(small0-res[B[smallpos].first].coord.front().u).total_degree();
3189c3189
< 	  doswap=tdeg_t_strictly_greater(small,cur,order);
---
> 	  doswap=tdeg_t_strictly_greater(small0,cur,order);
3194c3194
< 	    doswap=tdeg_t_strictly_greater(small,cur,order);
---
> 	    doswap=tdeg_t_strictly_greater(small0,cur,order);
3198c3198
< 	  swap(small,cur); // small=cur;
---
> 	  swap(small0,cur); // small0=cur;
6259c6259
<       tdeg_t small,cur;
---
>       tdeg_t small0,cur;
6268,6270c6268,6270
<       index_lcm(res[B[smallpos].first].coord.front().u,res[B[smallpos].second].coord.front().u,small,order);
<       smallsugar=res[B[smallpos].first].sugar+(small-res[B[smallpos].first].coord.front().u).total_degree();
<       smalltotdeg=small.total_degree();
---
>       index_lcm(res[B[smallpos].first].coord.front().u,res[B[smallpos].second].coord.front().u,small0,order);
>       smallsugar=res[B[smallpos].first].sugar+(small0-res[B[smallpos].first].coord.front().u).total_degree();
>       smalltotdeg=small0.total_degree();
6282c6282
< 	  doswap=tdeg_t_strictly_greater(small,cur,order);
---
> 	  doswap=tdeg_t_strictly_greater(small0,cur,order);
6297c6297
< 	  swap(small,cur); // small=cur;
---
> 	  swap(small0,cur); // small0=cur;

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: mingw32

Message par frederic han » sam. déc. 14, 2013 10:52 am

Salut,
j'ai essaye d'ajouter ntl et pari en cross compilant avec mingw32.
Je pense que pour ntl ca marche, mais pour pari il y a un probleme a la fin:

as tu une idee? (j'ai pris pari 2.5.4)

Code : Tout sélectionner

/bin/bash ../libtool --tag=CXX   --mode=link i686-w64-mingw32-g++  -g -O2 -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS  -static-libgcc -static-libstdc++ -L/usr/i686-w64-mingw32/lib -o icas.exe icas.o libxcas.la  -lgsl -lgslcblas  -lpthread -lm -lmpfr  -lgmp
libtool: link: i686-w64-mingw32-g++ -g -O2 -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS -static-libgcc -static-libstdc++ -o .libs/icas.exe icas.o  -L/usr/i686-w64-mingw32/lib ./.libs/libxcas.a /home/fred/dev/windows/giac-1.1.0/src/.libs/libgiac.a -lntl -lpari /usr/i686-w64-mingw32/lib/libgsl.dll.a /usr/i686-w64-mingw32/lib/libgslcblas.dll.a -lpthread /usr/i686-w64-mingw32/lib/libmpfr.a /usr/i686-w64-mingw32/lib/libgmp.a -L/usr/i686-w64-mingw32/lib
/home/fred/dev/windows/giac-1.1.0/src/.libs/libgiac.a(pari.o): In function `GEN2string':
/home/fred/dev/windows/giac-1.1.0/src/pari.cc:251: undefined reference to `_GENtostr'
/home/fred/dev/windows/giac-1.1.0/src/.libs/libgiac.a(pari.o): In function `pari_exec':
/home/fred/dev/windows/giac-1.1.0/src/pari.cc:650: undefined reference to `_PARI_stack_limit'
/home/fred/dev/windows/giac-1.1.0/src/pari.cc:649: undefined reference to `_avma'
/home/fred/dev/windows/giac-1.1.0/src/pari.cc:651: undefined reference to `_PARI_stack_limit'
/home/fred/dev/windows/giac-1.1.0/src/pari.cc:655: undefined reference to `_cb_pari_err_recover'
/home/fred/dev/windows/giac-1.1.0/src/pari.cc:660: undefined reference to `_avma'
/home/fred/dev/windows/giac-1.1.0/src/pari.cc:662: undefined reference to `_PARI_stack_limit'
/home/fred/dev/windows/giac-1.1.0/src/pari.cc:666: undefined reference to `_gp_read_str'

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

Re: mingw32

Message par parisse » dim. déc. 15, 2013 7:48 am

Bizarre, on dirait que tous ces noms de fonctions de pari ont un _ qui a ete ajoute, du coup le linker ne les trouve pas. Tu as compile pari avec le meme compilo?

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: mingw32

Message par frederic han » mer. déc. 18, 2013 11:29 am

Oui effectivement, la cross compilation n'etait pas bien passee et il melangeait les compilateurs.
Pour l'instant je n'arrive donc pas a compiler giac avec pari sous mingw.
En revanche NTL semble marcher. As tu un test pour verifier?
Fred

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

Re: mingw32

Message par parisse » mer. déc. 18, 2013 12:30 pm

Oui, tu peux faire
export GIAC_DEBUG=1
puis tu lances ./chk_cas dans le repertoire check et tu devrais voir des sorties du genre

Code : Tout sélectionner

*** start SFFactor.
factorization modulo small primes...
skipping 2
skipping 3
skipping 5
factoring mod 7...2.2e-05
degree sequence: 1*2 
small prime time: 0.000113, irreducible.
end   - step 0, 0; time = 0.000137

begin - step -1, 0; deg = 4

Répondre