Je rencontre une erreur en compilant les bindings java. Sur debian 12.5, je fais :
Code : Tout sélectionner
wget https://www-fourier.univ-grenoble-alpes.fr/~parisse/giac/giac_stable.tgz
tar xvzf giac_stable.tgz
cd  giac-1.9.0/
./configure
make
cd src
swig -c++ -java -package giac -outdir javagiac giac.i && \
     g++ -c -fpic giac_wrap.cxx  -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux
Code : Tout sélectionner
giac_wrap.cxx: In function ‘_jstring* Java_giac_giacJNI_gen_1printcharptr(JNIEnv*, jclass, jlong, jobject)’:
giac_wrap.cxx:3179:47: error: ‘const class giac::gen’ has no member named ‘printcharptr’
 3179 |   result = (char *)((giac::gen const *)arg1)->printcharptr();
      |                                               ^~~~~~~~~~~~
giac_wrap.cxx: In function ‘jboolean Java_giac_giacJNI_is_1known_1rootof(JNIEnv*, jclass, jlong, jlong, jobject, jlong, jobject)’:
giac_wrap.cxx:6217:69: error: invalid initialization of reference of type ‘const giac::vecteur&’ {aka ‘const giac::dbgprint_vector<giac::gen>&’} from expression of type ‘giac::gen’
 6217 |   result = (bool)giac::is_known_rootof((giac::vecteur const &)*arg1,*arg2,arg3);
      |                                                                     ^~~~~
In file included from giac.h:34:
alg_ext.h:46:57: note: in passing argument 2 of ‘bool giac::is_known_rootof(const vecteur&, const vecteur&, gen&, const context*)’
   46 |   bool is_known_rootof(const vecteur & v,const vecteur &lv,gen & symroot,GIAC_CONTEXT);
      |                                          ~~~~~~~~~~~~~~~^~
giac_wrap.cxx: In function ‘jlong Java_giac_giacJNI_alg_1evalf(JNIEnv*, jclass, jlong, jobject, jlong, jobject, jlong, jobject)’:
giac_wrap.cxx:6246:78: error: conversion from ‘giac::context*’ to ‘const giac::gen’ is ambiguous
 6246 |   result = giac::alg_evalf((giac::gen const &)*arg1,(giac::gen const &)*arg2,arg3);
      |                                                                              ^~~~
In file included from giac.h:7:
gen.h:662:5: note: candidate: ‘giac::gen::gen(int128_t)’ (near match)
  662 |     gen(int128_t i);
      |     ^~~
gen.h:662:5: note:   conversion of argument 1 would be ill-formed:
giac_wrap.cxx:6246:78: error: invalid conversion from ‘giac::context*’ to ‘int128_t’ {aka ‘__int128’} [-fpermissive]
 6246 |   result = giac::alg_evalf((giac::gen const &)*arg1,(giac::gen const &)*arg2,arg3);
      |                                                                              ^~~~
      |                                                                              |
      |                                                                              giac::context*
gen.h:659:5: note: candidate: ‘giac::gen::gen(longlong)’ (near match)
  659 |     gen(longlong i);
      |     ^~~
gen.h:659:5: note:   conversion of argument 1 would be ill-formed:
giac_wrap.cxx:6246:78: error: invalid conversion from ‘giac::context*’ to ‘longlong’ {aka ‘long long int’} [-fpermissive]
 6246 |   result = giac::alg_evalf((giac::gen const &)*arg1,(giac::gen const &)*arg2,arg3);
      |                                                                              ^~~~
      |                                                                              |
      |                                                                              giac::context*
gen.h:658:5: note: candidate: ‘giac::gen::gen(long int)’ (near match)
  658 |     gen(long i);
      |     ^~~
gen.h:658:5: note:   conversion of argument 1 would be ill-formed:
giac_wrap.cxx:6246:78: error: invalid conversion from ‘giac::context*’ to ‘long int’ [-fpermissive]
 6246 |   result = giac::alg_evalf((giac::gen const &)*arg1,(giac::gen const &)*arg2,arg3);
      |                                                                              ^~~~
      |                                                                              |
      |                                                                              giac::context*
gen.h:652:5: note: candidate: ‘giac::gen::gen(size_t)’ (near match)
  652 |     gen(size_t i): type(_INT_),subtype(0),val((int)i)  {
      |     ^~~
gen.h:652:5: note:   conversion of argument 1 would be ill-formed:
giac_wrap.cxx:6246:78: error: invalid conversion from ‘giac::context*’ to ‘size_t’ {aka ‘long unsigned int’} [-fpermissive]
 6246 |   result = giac::alg_evalf((giac::gen const &)*arg1,(giac::gen const &)*arg2,arg3);
      |                                                                              ^~~~
      |                                                                              |
      |                                                                              giac::context*
gen.h:647:5: note: candidate: ‘giac::gen::gen(int)’ (near match)
  647 |     gen(int i): type(_INT_),subtype(0),val(i) {
      |     ^~~
gen.h:647:5: note:   conversion of argument 1 would be ill-formed:
giac_wrap.cxx:6246:78: error: invalid conversion from ‘giac::context*’ to ‘int’ [-fpermissive]
 6246 |   result = giac::alg_evalf((giac::gen const &)*arg1,(giac::gen const &)*arg2,arg3);
      |                                                                              ^~~~
      |                                                                              |
      |                                                                              giac::context*
alg_ext.h:50:56: note: in passing argument 3 of ‘giac::gen giac::alg_evalf(const gen&, const gen&, const gen&, const context*)’
   50 |   gen alg_evalf(const gen & a,const gen &b,const gen & c,GIAC_CONTEXT);
      |                                            ~~~~~~~~~~~~^
giac_wrap.cxx: In function ‘jlong Java_giac_giacJNI_common_1minimal_1POLY(JNIEnv*, jclass, jlong, jobject, jlong, jobject, jlong, jobject, jlong, jobject, jlong, jlong, jobject)’:
giac_wrap.cxx:6348:106: error: cannot convert ‘giac::context*’ to ‘const giac::vecteur*’ {aka ‘const giac::dbgprint_vector<giac::gen>*’}
 6348 |   result = giac::common_minimal_POLY((giac::gen const &)*arg1,(giac::gen const &)*arg2,*arg3,*arg4,*arg5,arg6);
      |                                                                                                          ^~~~
      |                                                                                                          |
      |                                                                                                          giac::context*
alg_ext.h:53:96: note:   initializing argument 6 of ‘giac::gen giac::common_minimal_POLY(const gen&, const gen&, gen&, gen&, int&, const vecteur*, const context*)’
   53 |   gen common_minimal_POLY(const gen & ga,const gen & gb, gen & a,gen & b,int &k,const vecteur *l,GIAC_CONTEXT);
      |                                                                                 ~~~~~~~~~~~~~~~^
giac_wrap.cxx: In function ‘jlong Java_giac_giacJNI_integrate_1gen_1rem(JNIEnv*, jclass, jlong, jobject, jlong, jobject, jlong, jobject, jlong, jobject)’:
giac_wrap.cxx:9540:92: error: invalid conversion from ‘giac::context*’ to ‘int’ [-fpermissive]
 9540 |   result = giac::integrate_gen_rem((giac::gen const &)*arg1,(giac::gen const &)*arg2,*arg3,arg4);
      |                                                                                            ^~~~
      |                                                                                            |
      |                                                                                            giac::context*
giac_wrap.cxx:9540:35: error: too few arguments to function ‘giac::gen giac::integrate_gen_rem(const gen&, const gen&, gen&, int, const context*)’
 9540 |   result = giac::integrate_gen_rem((giac::gen const &)*arg1,(giac::gen const &)*arg2,*arg3,arg4);
      |            ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from giac.h:22:
intg.h:68:7: note: declared here
   68 |   gen integrate_gen_rem(const gen & e, const gen & x, gen & remains_to_integrate,int intmode,GIAC_CONTEXT);
      |       ^~~~~~~~~~~~~~~~~
giac_wrap.cxx: In function ‘jlong Java_giac_giacJNI_integrate_1id_1rem(JNIEnv*, jclass, jlong, jobject, jlong, jobject, jlong, jobject, jlong, jobject)’:
giac_wrap.cxx:9576:34: error: too few arguments to function ‘giac::gen giac::integrate_id_rem(const gen&, const gen&, gen&, const context*, int)’
 9576 |   result = giac::integrate_id_rem((giac::gen const &)*arg1,(giac::gen const &)*arg2,*arg3,arg4);
      |            ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
intg.h:70:7: note: declared here
   70 |   gen integrate_id_rem(const gen & e, const gen & x, gen & remains_to_integrate,GIAC_CONTEXT,int intmode);
      |       ^~~~~~~~~~~~~~~~
giac_wrap.cxx: In function ‘jlong Java_giac_giacJNI_linear_1integrate(JNIEnv*, jclass, jlong, jobject, jlong, jobject, jlong, jobject, jlong, jobject)’:
giac_wrap.cxx:9612:91: error: invalid conversion from ‘giac::context*’ to ‘int’ [-fpermissive]
 9612 |   result = giac::linear_integrate((giac::gen const &)*arg1,(giac::gen const &)*arg2,*arg3,arg4);
      |                                                                                           ^~~~
      |                                                                                           |
      |                                                                                           giac::context*
giac_wrap.cxx:9612:34: error: too few arguments to function ‘giac::gen giac::linear_integrate(const gen&, const gen&, gen&, int, const context*)’
 9612 |   result = giac::linear_integrate((giac::gen const &)*arg1,(giac::gen const &)*arg2,*arg3,arg4);
      |            ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
intg.h:71:7: note: declared here
   71 |   gen linear_integrate(const gen & e,const gen & x,gen & remains_to_integrate,int intmode,GIAC_CONTEXT);
      |       ^~~~~~~~~~~~~~~~
giac_wrap.cxx: In function ‘jlong Java_giac_giacJNI__1readwav(JNIEnv*, jclass, jlong, jobject, jlong, jobject)’:
giac_wrap.cxx:11759:18: error: ‘_readwav’ is not a member of ‘giac’
11759 |   result = giac::_readwav((giac::gen const &)*arg1,arg2);
      |                  ^~~~~~~~
giac_wrap.cxx: In function ‘jlong Java_giac_giacJNI__1writewav(JNIEnv*, jclass, jlong, jobject, jlong, jobject)’:
giac_wrap.cxx:11781:18: error: ‘_writewav’ is not a member of ‘giac’; did you mean ‘_writergb’?
11781 |   result = giac::_writewav((giac::gen const &)*arg1,arg2);
      |                  ^~~~~~~~~
      |                  _writergb
Par ailleurs, j'utilisais (il y a une dizaine d'années...) des binaires précompilés, assez pratiques pour packager sans devoir compiler moi même pour toutes les plateformes. J'en ai cherché des version récentes et j'ai trouvé:
Code : Tout sélectionner
https://www-fourier.ujf-grenoble.fr/~parisse/giac/javagiac_win32.tgz
https://www-fourier.ujf-grenoble.fr/~parisse/giac/javagiac_win64.tgz
https://www-fourier.ujf-grenoble.fr/~parisse/giac/javagiac_linux32.tgz
https://www-fourier.ujf-grenoble.fr/~parisse/giac/javagiac_linux64.tgz
https://www-fourier.ujf-grenoble.fr/~parisse/giac/java_mac.tgz
Merci !