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 !