Extension LibreOffice : bug de Giac compilé avec MSVC19

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

Modérateur : xcasadmin

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

Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par cdeval » mer. nov. 17, 2021 2:30 pm

Bonjour Bernard,
après toutes ces années, je me suis replongé dans mon extension pour le tableur de OpenOffice.org/LibreOffice (OOo/LO).
Depuis nos échanges de 2009 qui m'avait permis de compiler mon extension, beaucoup de changements ont eu lieu et je voulais mettre à jour mon programme mais le temps me manquait et je voulais surtout attendre de voir si LO allait s'imposer. C'est chose faite donc je devais m'y remettre pour plusieurs raisons :
- pour que mon programme fonctionne dans LO (l'API a évolué et ça ne s'installait plus),
- sous Linux : pour compiler une version indépendante des librairies présentes sur la distribution car en cas de mise à jour du système, si les dépendances ne sont plus satisfaites, OOo/LO plante au démarrage et il faut désinstaller l'extension, voir quelles sont les librairies manquantes et les installer manuellement. Bref, pas du tout à la portée d'un utilisateur lambda.
- sous windows : pour compiler une version 64 bits (il n'y a pas de problème de librairies manquantes sous windows puisque mon extension ne dépend que des dll mpir et mpfr que je peux mettre dans mon extension).
- pour intégrer une version plus récente de giac (c'était la version 0.8.3 à l'époque).

J'ai bien avancé :

Sous Linux, tout est bon, ça compile et fonctionne dans LO avec giac 1.7.0. Je n'ai pas encore attaqué la version statique de ma librairie mais je devrais y arriver. Je t'enverrai un lien pour télécharger l'extension dès que je l'aurai finalisée.

Sous windows, je savais que ça serait plus difficile. Je rappelle qu'il faut compiler avec le même compilateur que celui qui sert à fabriquer OOo/LO, donc celui de microsoft (cl.exe). Cela nous avait conduit il y a 12 ans (!) à quelques ajustements sur le code source de Giac.
J'ai repris la démarche avec le code de giac version 1.7.0 et j'ai pu recompiler une librairie giac_oo.lib avec MS Visual Studio 19 en 64 bits avec support des librairies mpir et mpfr.
J'ai compilé ensuite mon extension pour windows x64 avec le SDK de LO. Ça s'installe et ça fonctionne... presque ; il me reste un bug lié à giac que je ne sais pas résoudre, n'en maîtrisant pas le code. Cela ne te prendra peut-être que quelques minutes à résoudre.

J'ai mis dans un répertoire partagé tous les fichiers dont je parle dans la suite (exécutables et sources) : https://drive.google.com/drive/folders/ ... sp=sharing

Voici ce bug que je peux reproduire facilement avec mon programme giac_oo.exe issu de giac_oo.cpp :
Si j'évalue une expression du genre : "1+1" ou "evalf(pi,30)", ça fonctionne bien.
Mais si j'évalue "simplifier(x+y)" j'obtiens une erreur venant du fichier MSVC\include\vector "Expression : vector iterators incompatible" (après débogage : exception levée dans le fichier monomial.h ligne 479 : if(new_coord.begin()==a) )

Si tu as le temps de te pencher sur ce problème de compilation de la librairie giac pour x64, je te décris ci-dessous toutes les étapes qui te permettront de compiler et déboguer giac-oo.exe et ainsi remonter jusqu'à la source de l'instruction dans le fichier monomial.h comme je l'ai fait.

1) Télécharger et installer Microsoft Visual Studio community 2019 (la version 2022 vient de sortir mais j'avais commencé avant).
Cocher le composant "developpement desktop en C++" à l'installation
Dans un répertoire, créer un fichier vcvars64.bat qui contient : call "c:\program files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\Auxiliary\Build\VCVARS64.bat"
Dans ce même répertoire, créer un fichier hello.cpp pour tester la compilation en ligne de commande :

Code : Tout sélectionner

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, world, from Visual C++!" << endl;
}
Ouvrir une boite de commande (cmd.exe) dans ce répertoire et

Code : Tout sélectionner

vcvars64.bat
cl /EHsc hello.cpp
./hello.exe
Pour compiler en mode Debug ajouter /MDd

2) Compiler mpir
Le site https://github.com/BrianGladman/mpir contient un projet compilable par MSVC 19.
Menu code, download zip, extraire l'archive mpir dans le répertoire contenant vcvars64.bat.
Ouvrir mpir/msvc/vs19/mpir.sln avec MSVC19.
Choisir architecture x64 et mode Debug.
Clic droit sur dll_mpir_gc puis "projet uniquement->générer uniquement la dll"
Aller dans mpir/msvc/vs19/dll_mpir_gc/x64/Debug et :
Copier gmp.h de mpir dans c:\program files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include
Copier mpir.lib dans c:\program files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64
Copier mpir.dll dans le répertoire du programme qui s'en servira.

Tester avec HelloGMP :

Code : Tout sélectionner

// compil : cl /MDd /EHsc helloGMP.cpp mpir.lib
#include <iostream>
#include <gmp.h>
///From http://www.richelbilderbeek.nl/CppMpz_tToStr.htm
const std::string Mpz_tToStr(const mpz_t& i)
{
  static char buffer[256];
  mpz_get_str(buffer,10,i);
  return std::string(buffer);
}

int main()
{
  mpz_t i;
  mpz_init_set_str(i,"123456789012345678901234567890",10);
  //Perform i = i * i
  mpz_mul(i,i,i);

  std::cout
    << "Hello GMP,\n"
    << Mpz_tToStr(i) << " times.\n";

  mpz_clear(i);
}
Compiler :

Code : Tout sélectionner

cl /MDd /EHsc helloGMP.cpp mpir.lib
./helloGMP.exe
3) compiler mpfr :
sources de mpfr : https://github.com/BrianGladman/mpfr
ouvrir mpfr/build.vs19/dll_mpfr.sln
Choisir architecture x64 et mode Debug.
Clic droit sur dll_mpfr et "projet uniquement->générer uniquement la dll"
Aller dans mpfr/dll/x64/Debug et
Copier mpfr.h de dans c:\program files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include
Copier mpfr.lib dans c:\program files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64
Copier mpfr.dll dans le répertoire du programme qui s'en servira

Tester avec helloMPFR.cpp :

Code : Tout sélectionner

// compil : cl /MDd /EHsc helloMPFR.cpp mpfr.lib mpir.lib
#include <stdio.h>
#include <gmp.h>
#include <mpfr.h>

int main (void)
{
  unsigned int i;
  mpfr_t s, t, u;

  mpfr_init2 (t, 200);
  mpfr_set_d (t, 1.0, MPFR_RNDD);
  mpfr_init2 (s, 200);
  mpfr_set_d (s, 1.0, MPFR_RNDD);
  mpfr_init2 (u, 200);
  for (i = 1; i <= 100; i++)
    {
      mpfr_mul_ui (t, t, i, MPFR_RNDU);
      mpfr_set_d (u, 1.0, MPFR_RNDD);
      mpfr_div (u, u, t, MPFR_RNDD);
      mpfr_add (s, s, u, MPFR_RNDD);
    }
  printf ("Sum is ");
  mpfr_out_str (stdout, 10, 0, s, MPFR_RNDD);
  putchar ('\n');
  mpfr_clear (s);
  mpfr_clear (t);
  mpfr_clear (u);
  mpfr_free_cache ();
  return 0;
}
compiler :

Code : Tout sélectionner

cl /MDd /EHsc helloMPFR.cpp mpfr.lib mpir.lib
./helloMPFR.exe
4) Créer la librairie giac_oo.lib

Installer cygwin64 et dans le setup installer make qui ne l'est pas par défaut.

Dans giac-1.7.0/src de giac :
- copier config.h.vcc en config.h et décommenter #define HAVE_LIBMPFR 1 (j'ai mis mon config.h dans le répertoire partagé)
- modifier Makefile.vcc pour adapter le chemin vers visual studio 19. J'ai ajouté des fichiers *.obj du Makefile.win64 sans vraiment savoir ce qui était superflu (j'ai mis mon Makefile.vcc dans le répertoire partagé).
- j'ai dû modifier beaucoup de fichiers à cause d'erreurs liées à la compilation (il y avait aussi énormément de warnings que j'ai ignorés, peut-être faudra-t-il creuser de ce côté là...) :

dans src/Graphe.h ajouter #include <math.h> pour définir la constante M_LN2

dans src/global.cc(1274) : char buf_[L+1]; ne compile pas avec cl : erreur C2131, allocation dynamique impossible à la compilation.
J'ai remplacé cette ligne par les deux suivantes :

Code : Tout sélectionner

char *buf_ = NULL;
buf_=(char *)calloc(L+1,sizeof(char));
dans gen.cc(14309) : ajouter #include <atlbase.h>

dans input_lexer.cc(4895) : ajouter #include <io.h> et remplacer isatty par _isatty

enlever cutils, libbf, js (ne compilent pas, spécifiques win64 ? nécessaires ?)

renommer ces fichiers *.c en *.cc : nautywrapper, TmpFGLM, TmpLESystemSolver, caseval, graphic, libunicode, qjsgiac, quickjs, quickjs-libc.

dans graphe.cc(13421) : erreur C3848. Ajouter le type "const" dans graphe.h (ligne 566 pour bool operator() )

- Compiler :
Ouvrir une boite cmd.exe, aller dans giac-1.7.0/src et lancer

Code : Tout sélectionner

vcvars64.bat
c:\cygwin64\cygwin.bat
make -f Makefile.vcc
Ça cree un giac_oo.lib qui sera à mettre dans vc/lib

5) Compiler le programme de test giac-1.7.0/src/giac_oo.cpp :
Créer dans le repertoire include de MSVC un sous-repertoire giac.
Copier les .h de giac dans c:\program files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\giac
Copier mpir.dll et mpfr.dll dans giac-1.7.0/src

Programme giac_oo.cpp :

Code : Tout sélectionner

// compile-command windows : "cl /Zi /MDd /I. /EHsc giac_oo.cpp giac_oo.lib mpfr.lib mpir.lib"
// compile-command Linux : "g++ -g -o giac_oo giac_oo.cpp -lgiac -lgmp" 
#include <giac/config.h>
#include <giac/gen.h>
#include <giac/prog.h>

int main(){
  std::string s;
  for (;;){
    std::cout << "Expression: " ;
    std::cin >> s;
    giac::gen g(s,0);
    if (is_zero(g))
      return 0;
    g=giac::protecteval(g,1,0);
    std::cout << g.print(0) << std::endl;
  }
}
Compiler

Code : Tout sélectionner

cl /Zi /MDd /I. /EHsc giac_oo.cpp giac_oo.lib mpfr.lib mpir.lib
./giac_oo.exe
tester "evalf(pi,30)"
Ça bug sur l'expression "simplifier(x+y)".

Pour déboguer, lancer VS2019 et cliquer sur "ouvrir un projet ou une solution". Sélectionner le fichier giac_oo.exe puis clic droit et "déboguer", "démarrer une nouvelle instance"
taper simplifier(x+y) et cliquer sur recommencer après le plantage pour avoir accès à la pile des appels (accès au code source par clic-droit).

Voilà où j'en suis.
Je mets également dans le répertoire partagé une version brute de compilation de mon extension LO pour windows x64 qui installe les fonctions dans le tableur.
Il suffit de double cliquer pour l'installer.
Le même bug se produit bien sûr si on tape dans une cellule =csomme("x";"y")
Par contre =evaluer("pi";30) renvoie le bon résultat.

Merci d'avance pour ton aide !

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par parisse » mer. nov. 17, 2021 9:25 pm

Ouhla, c'est pas simple a reproduire : je n'ai que tres peu de place sur ma VM windows, et surtout j'ai peur d'abimer ma config actuelle.
En plus le message d'erreur est aberrant, les 2 iterateurs sont evidemment compatibles.

Quels sont les flags de compilation de giac? Ce serait sans doute une bonne idee de partir des memes que ceux qui fontionnent avec HP.

Code : Tout sélectionner

_DEBUG
WIN32
WINDOWS
HAVE_CONFIG_H
NO_UNARY_FUNCTION_COMPOSE
STATIC_BUILTIN_LEXER_FUNCTIONS
IN_GIAC
GIAC_VECTOR
__VISUALC__
NO_PHYSICAL_CONSTANTS
NO_STDEXCEPT
_CRT_SECURE_NO_WARNINGS

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par cdeval » jeu. nov. 18, 2021 10:43 pm

J'avais repris les flags de l'époque !
C'est à dire HAVE_CONFIG_H et IN_GIAC (du Makefile.vcc) et ceux du config.h qui est dans le répertoire partagé.
J'ai essayé avec ceux suggérés ; ce n'est pas mieux voire pire :
avec

Code : Tout sélectionner

CXXFLAGS = -DHAVE_CONFIG_H -DIN_GIAC /I. /I.. /I'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include' /EHsc /Zi /MDd /W3 # /D "_UNICODE" /D "UNICODE" -pg

et dans config.h :

Code : Tout sélectionner

#define __VISUALC__
#define _DEBUG
#define WIN32
#define x86_64
#define WINDOWS
#define NO_PHYSICAL_CONSTANTS
#define NO_STDEXCEPT
#define _CRT_SECURE_NO_WARNINGS
compil giac_oo.lib OK et giac_oo.cpp OK mais toujours le plantage à l'exécution de giac_oo.exe pour l'expression "simplifier(x+y)".
Je viens de mettre dans mon répertoire partagé le fichier "warnings compil lib giac_oo.txt" qui contient les warnings lors de la compilation giac_oo.lib. Il y a peut-être à creuser de ce côté là car je vois passer des conversions de type à la pelle qui pourraient ocasionner des pertes de données...

Test avec ajout de :

Code : Tout sélectionner

#define STATIC_BUILTIN_LEXER_FUNCTIONS
compil librairie giac_oo.lib OK mais compil giac_oo.cpp failed :

Code : Tout sélectionner

$ cl /Zi /MDd /I. /EHsc giac_oo.cpp giac_oo.lib mpfr.lib mpir.lib
Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30136 pour x64
Copyright (C) Microsoft Corporation. Tous droits réservés.

giac_oo.cpp
Microsoft (R) Incremental Linker Version 14.29.30136.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:giac_oo.exe
/debug
giac_oo.obj
giac_oo.lib
mpfr.lib
mpir.lib
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_FP" (?at_FP@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_IP" (?at_IP@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_assert" (?at_assert@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_bin" (?at_bin@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_bool" (?at_bool@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_clique_stats" (?at_clique_stats@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_hex" (?at_hex@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_igamma" (?at_igamma@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_is_inside" (?at_is_inside@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_regroup" (?at_regroup@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.lib(global.obj) : error LNK2001: symbole externe non résolu "struct giac::unary_function_ptr const * const giac::at_ugamma" (?at_ugamma@giac@@3QEBUunary_function_ptr@1@EB)
giac_oo.exe : fatal error LNK1120: 11 externes non résolus
avec ajout de

Code : Tout sélectionner

#define GIAC_VECTOR
compil giac_oo.lib failed :

Code : Tout sélectionner

cl.exe -DHAVE_CONFIG_H -DIN_GIAC /I. /I.. /I'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include' /EHsc /Zi /MDd /W3  /c misc.cc
Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30136 pour x64
Copyright (C) Microsoft Corporation. Tous droits réservés.

misc.cc
C:\cygwin64\home\Blandine\giac-1.7.0\src\config.h(29): warning C4005: '_DEBUG' : redéfinition de macro
misc.cc: note: voir la définition précédente de '_DEBUG'
C:\cygwin64\home\Blandine\giac-1.7.0\src\first.h(560): warning C4244: 'return' : conversion de 'double' en 'float', perte possible de données
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(1836): error C2977: 'std::vector' : nombre d'arguments modèle trop élevé
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(443): note: voir la déclaration de 'std::vector'
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(1845): error C2953: 'std::vector' : modèle de classe déjà défini
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(1845): note: voir la déclaration de 'std::vector'
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(3099): error C2953: 'std::vector' : modèle de classe déjà défini
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(2482): note: voir la déclaration de 'std::vector'
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(3103): error C3203: 'vector' : la classe modèle non spécialisée ne peut pas être utilisée comme argument modèle pour le paramètre modèle '_Kty' ; type réel attendu
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(3103): error C2908: spécialisation explicite ; 'std::hash<int>' a déjà été instancié
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(3102): error C3211: 'std::hash<int>' : une spécialisation explicite utilise une syntaxe de spécialisation partielle, utilisez le modèle <> à la place
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\system_error(425): note: voir la déclaration de 'std::hash<int>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(518): error C3203: 'vector' : la classe modèle non spécialisée ne peut pas être utilisée comme argument modèle pour le paramètre modèle '_Ty' ; type réel attendu
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(618): error C3203: 'vector' : la classe modèle non spécialisée ne peut pas être utilisée comme argument modèle pour le paramètre modèle '_Ty' ; type réel attendu
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(700): error C3203: 'vector' : la classe modèle non spécialisée ne peut pas être utilisée comme argument modèle pour le paramètre modèle '_Kty' ; type réel attendu
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(700): error C3203: 'vector' : la classe modèle non spécialisée ne peut pas être utilisée comme argument modèle pour le paramètre modèle '_Ty' ; type réel attendu
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(784): error C3203: 'vector' : la classe modèle non spécialisée ne peut pas être utilisée comme argument modèle pour le paramètre modèle '_Ty' ; type réel attendu
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1034): error C2535: 'void giac::graphe::set_subgraph(const giac::graphe::ivector &,int)' : fonction membre déjà définie ou déclarée
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1033): note: voir la déclaration de 'giac::graphe::set_subgraph'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1029): error C2440: '<function-style-cast>' : impossible de convertir de 'int' en 'giac::graphe::ivector'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1029): note: Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(213): error C2662: 'size_t std::vector<_Tp>::size(void) const' : impossible de convertir un pointeur 'this' de 'const giac::graphe::ivector' en 'const std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(213): note: Raison : impossible de convertir de 'const giac::graphe::ivector' en 'const std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(213): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(551): note: voir la déclaration de 'std::vector<_Tp>::size'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(218): error C2663: 'std::vector<_Tp>::begin' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(218): error C2663: 'std::vector<_Tp>::end' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(218): error C2672: 'std::binary_search' : fonction correspondante surchargée introuvable
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(218): error C2780: 'bool std::binary_search(_FwdIt,_FwdIt,const _Ty &)' : 3 arguments attendus - 2 fournis
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\algorithm(6416): note: voir la déclaration de 'std::binary_search'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(218): error C2780: 'bool std::binary_search(_FwdIt,_FwdIt,const _Ty &,_Pr)' : 4 arguments attendus - 2 fournis
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\algorithm(6406): note: voir la déclaration de 'std::binary_search'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(245): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'giac::graphe::ivector' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(245): note: lors de la tentative de mise en correspondance de la liste des arguments '(giac::graphe::ivector, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(255): error C2662: 'size_t std::vector<_Tp>::size(void) const' : impossible de convertir un pointeur 'this' de 'giac::graphe::ivector' en 'const std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(255): note: Raison : impossible de convertir de 'giac::graphe::ivector' en 'const std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(255): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(551): note: voir la déclaration de 'std::vector<_Tp>::size'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(255): error C2662: 'void std::vector<_Tp>::resize(size_t,const _Tp &)' : impossible de convertir un pointeur 'this' de 'giac::graphe::ivector' en 'std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(255): note: Raison : impossible de convertir de 'giac::graphe::ivector' en 'std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(255): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(571): note: voir la déclaration de 'std::vector<_Tp>::resize'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(256): error C2660: 'std::vector<_Tp>::resize' : la fonction ne prend pas 1 arguments
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(571): note: voir la déclaration de 'std::vector<_Tp>::resize'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(256): error C2663: 'std::vector<_Tp>::front' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(257): error C2663: 'std::vector<_Tp>::back' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(258): error C2663: 'std::vector<_Tp>::front' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(520): warning C4244: 'return' : conversion de 'double' en 'int', perte possible de données
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(526): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'giac::graphe::ivector' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(526): note: lors de la tentative de mise en correspondance de la liste des arguments '(giac::graphe::ivector, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(526): error C2660: 'giac::graphe::bucketsampler::update' : la fonction ne prend pas 1 arguments
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(525): note: voir la déclaration de 'giac::graphe::bucketsampler::update'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(554): error C2512: 'std::vector' : aucun constructeur par défaut approprié disponible
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(2482): note: voir la déclaration de 'std::vector'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(582): error C2512: 'std::vector' : aucun constructeur par défaut approprié disponible
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(2482): note: voir la déclaration de 'std::vector'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(620): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const giac::graphe::bitrow' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(620): note: lors de la tentative de mise en correspondance de la liste des arguments '(const giac::graphe::bitrow, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(621): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const giac::graphe::bitmatrix' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(621): note: lors de la tentative de mise en correspondance de la liste des arguments '(const giac::graphe::bitmatrix, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(622): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'giac::graphe::bitmatrix' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(622): note: lors de la tentative de mise en correspondance de la liste des arguments '(giac::graphe::bitmatrix, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(627): error C2662: 'void std::vector<_Tp>::push_back(const _Tp &)' : impossible de convertir un pointeur 'this' de 'giac::graphe::ipairs' en 'std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(627): note: Raison : impossible de convertir de 'giac::graphe::ipairs' en 'std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(627): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(559): note: voir la déclaration de 'std::vector<_Tp>::push_back'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(628): error C2664: 'void std::stack<int,std::deque<int,std::allocator<int>>>::push(const int &)' : impossible de convertir l'argument 1 de 'giac::graphe::ipairs' en 'const int &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(628): note: Raison : impossible de convertir de 'giac::graphe::ipairs' en 'const int'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(628): note: Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\stack(76): note: voir la déclaration de 'std::stack<int,std::deque<int,std::allocator<int>>>::push'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(628): error C2662: 'void std::vector<_Tp>::clear(void)' : impossible de convertir un pointeur 'this' de 'giac::graphe::ipairs' en 'std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(628): note: Raison : impossible de convertir de 'giac::graphe::ipairs' en 'std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(628): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(568): note: voir la déclaration de 'std::vector<_Tp>::clear'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(634): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const giac::graphe::ivectors' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(634): note: lors de la tentative de mise en correspondance de la liste des arguments '(const giac::graphe::ivectors, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(647): error C2662: 'size_t std::vector<_Tp>::size(void) const' : impossible de convertir un pointeur 'this' de 'const giac::graphe::ivector' en 'const std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(647): note: Raison : impossible de convertir de 'const giac::graphe::ivector' en 'const std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(647): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(551): note: voir la déclaration de 'std::vector<_Tp>::size'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(665): error C2663: 'std::vector<_Tp>::begin' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(665): error C2663: 'std::vector<_Tp>::end' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(668): error C2663: 'std::vector<_Tp>::begin' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(668): error C2663: 'std::vector<_Tp>::end' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(671): error C2662: 'size_t std::vector<_Tp>::size(void) const' : impossible de convertir un pointeur 'this' de 'const giac::graphe::ivector' en 'const std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(671): note: Raison : impossible de convertir de 'const giac::graphe::ivector' en 'const std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(671): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(551): note: voir la déclaration de 'std::vector<_Tp>::size'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(795): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'std::vector' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(795): note: lors de la tentative de mise en correspondance de la liste des arguments '(std::vector, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(810): error C2514: 'std::vector' : le modèle de classe ne peut pas être construit
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(2482): note: voir la déclaration de 'std::vector'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(810): error C2663: 'std::vector<_Tp>::back' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(810): error C2440: 'return' : impossible de convertir de 'giac::graphe::point' en 'std::vector'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(810): note: Impossible de copier la construction class 'std::vector', car les constructeurs de copie sont ambigus ou aucun constructeur de copie n'est disponible
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(811): error C2514: 'std::vector' : le modèle de classe ne peut pas être construit
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(2482): note: voir la déclaration de 'std::vector'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(811): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'giac::graphe::point' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(811): note: lors de la tentative de mise en correspondance de la liste des arguments '(giac::graphe::point, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(811): error C2663: 'std::vector<_Tp>::back' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(811): error C2440: 'return' : impossible de convertir de 'giac::graphe::point' en 'std::vector'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(811): note: Impossible de copier la construction class 'std::vector', car les constructeurs de copie sont ambigus ou aucun constructeur de copie n'est disponible
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(958): error C2662: 'bool std::vector<_Tp>::empty(void) const' : impossible de convertir un pointeur 'this' de 'std::vector' en 'const std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(958): note: Raison : impossible de convertir de 'std::vector' en 'const std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(958): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(569): note: voir la déclaration de 'std::vector<_Tp>::empty'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(958): error C2662: 'void std::vector<_Tp>::reserve(size_t)' : impossible de convertir un pointeur 'this' de 'std::vector' en 'std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(958): note: Raison : impossible de convertir de 'std::vector' en 'std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(958): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(570): note: voir la déclaration de 'std::vector<_Tp>::reserve'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(967): error C2662: 'void std::vector<_Tp>::clear(void)' : impossible de convertir un pointeur 'this' de 'giac::graphe::ivectors' en 'std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(967): note: Raison : impossible de convertir de 'giac::graphe::ivectors' en 'std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(967): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(568): note: voir la déclaration de 'std::vector<_Tp>::clear'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(977): error C2663: 'std::vector<_Tp>::begin' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(977): error C2663: 'std::vector<_Tp>::end' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(977): error C2512: 'std::vector' : aucun constructeur par défaut approprié disponible
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(977): note: Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(982): error C2662: 'void std::vector<_Tp>::clear(void)' : impossible de convertir un pointeur 'this' de 'giac::graphe::ivector' en 'std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(982): note: Raison : impossible de convertir de 'giac::graphe::ivector' en 'std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(982): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(568): note: voir la déclaration de 'std::vector<_Tp>::clear'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(983): error C2663: 'std::vector<_Tp>::begin' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(983): error C2663: 'std::vector<_Tp>::end' : 2 surcharges n'ont pas de conversion autorisée pour le pointeur 'this'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(983): error C2672: 'std::sort' : fonction correspondante surchargée introuvable
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(983): error C2780: 'void std::sort(const _RanIt,const _RanIt)' : 2 arguments attendus - 1 fournis
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\algorithm(7403): note: voir la déclaration de 'std::sort'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(983): error C2780: 'void std::sort(const _RanIt,const _RanIt,_Pr)' : 3 arguments attendus - 1 fournis
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\algorithm(7395): note: voir la déclaration de 'std::sort'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(996): error C2662: 'bool std::vector<_Tp>::empty(void) const' : impossible de convertir un pointeur 'this' de 'const std::vector' en 'const std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(996): note: Raison : impossible de convertir de 'const std::vector' en 'const std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(996): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(569): note: voir la déclaration de 'std::vector<_Tp>::empty'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1002): error C2662: 'size_t std::vector<_Tp>::size(void) const' : impossible de convertir un pointeur 'this' de 'const std::vector' en 'const std::vector<_Tp> &'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1002): note: Raison : impossible de convertir de 'const std::vector' en 'const std::vector<_Tp>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1002): note: La conversion requiert un second constructeur ou opérateur de conversion défini par l'utilisateur
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(551): note: voir la déclaration de 'std::vector<_Tp>::size'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1027): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const std::vector' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1027): note: lors de la tentative de mise en correspondance de la liste des arguments '(const std::vector, int)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1028): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'const std::vector' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1028): note: lors de la tentative de mise en correspondance de la liste des arguments '(const std::vector, int)'
misc.cc(620): error C2514: 'std::vector' : le modèle de classe ne peut pas être construit
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\vector(2482): note: voir la déclaration de 'std::vector'
misc.cc(623): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'std::vector' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
misc.cc(623): note: lors de la tentative de mise en correspondance de la liste des arguments '(std::vector, int)'
misc.cc(642): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'std::vector' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
misc.cc(642): note: lors de la tentative de mise en correspondance de la liste des arguments '(std::vector, int)'
misc.cc(655): error C2678: '[' binaire : aucun opérateur trouvé qui accepte un opérande de partie gauche de type 'std::vector' (ou il n'existe pas de conversion acceptable)
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(558): note: est peut-être 'const _Tp &std::vector<_Tp>::operator [](size_t) const'
C:\cygwin64\home\Blandine\giac-1.7.0\src\vector.h(555): note: ou       '_Tp &std::vector<_Tp>::operator [](size_t)'
misc.cc(655): note: lors de la tentative de mise en correspondance de la liste des arguments '(std::vector, int)'
misc.cc(928): error C2440: 'initialisation' : impossible de convertir de 'const giac::monomial<T> *' en 'const _Tp *'
        with
        [
            T=giac::gen
        ]
misc.cc(928): note: Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
misc.cc(929): error C2440: 'initialisation' : impossible de convertir de 'const giac::monomial<T> *' en 'const _Tp *'
        with
        [
            T=giac::gen
        ]
misc.cc(929): note: Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
misc.cc(1137): error C2027: utilisation du type non défini 'std::vector<giac::facteur<giac::polynome>>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\gen.h(194): note: voir la déclaration de 'std::vector<giac::facteur<giac::polynome>>'
misc.cc(1137): error C2079: 'f' utilise une class de 'std::vector<giac::facteur<giac::polynome>>' non défini
misc.cc(1137): error C2027: utilisation du type non défini 'std::vector<giac::facteur<giac::polynome>>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\gen.h(194): note: voir la déclaration de 'std::vector<giac::facteur<giac::polynome>>'
misc.cc(1138): error C2027: utilisation du type non défini 'std::vector<giac::facteur<giac::polynome>>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\gen.h(194): note: voir la déclaration de 'std::vector<giac::facteur<giac::polynome>>'
misc.cc(1138): error C2065: 'const_iterator' : identificateur non déclaré
misc.cc(1138): error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'it'
misc.cc(1138): error C2065: 'it' : identificateur non déclaré
misc.cc(1138): error C2065: 'itend' : identificateur non déclaré
misc.cc(1140): error C2065: 'it' : identificateur non déclaré
misc.cc(1140): error C2065: 'itend' : identificateur non déclaré
misc.cc(1140): error C2065: 'it' : identificateur non déclaré
misc.cc(1141): error C2065: 'it' : identificateur non déclaré
misc.cc(1141): error C2065: 'it' : identificateur non déclaré
misc.cc(1141): error C2661: 'giac::pow' : aucune fonction surchargée ne nécessite 1 arguments
misc.cc(1151): error C2027: utilisation du type non défini 'std::vector<giac::facteur<giac::polynome>>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\gen.h(194): note: voir la déclaration de 'std::vector<giac::facteur<giac::polynome>>'
misc.cc(1151): error C2079: 'f' utilise une class de 'std::vector<giac::facteur<giac::polynome>>' non défini
misc.cc(1151): error C2027: utilisation du type non défini 'std::vector<giac::facteur<giac::polynome>>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\gen.h(194): note: voir la déclaration de 'std::vector<giac::facteur<giac::polynome>>'
misc.cc(1152): error C2027: utilisation du type non défini 'std::vector<giac::facteur<giac::polynome>>'
C:\cygwin64\home\Blandine\giac-1.7.0\src\gen.h(194): note: voir la déclaration de 'std::vector<giac::facteur<giac::polynome>>'
misc.cc(1152): error C2065: 'const_iterator' : identificateur non déclaré
misc.cc(1152): error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'it'
misc.cc(1152): error C2065: 'it' : identificateur non déclaré
misc.cc(1152): error C2065: 'itend' : identificateur non déclaré
misc.cc(1153): error C2065: 'it' : identificateur non déclaré
misc.cc(1153): error C2065: 'itend' : identificateur non déclaré
misc.cc(1153): error C2065: 'it' : identificateur non déclaré
misc.cc(1154): error C2065: 'it' : identificateur non déclaré
misc.cc(1154): error C2530: 'p' : les références doivent être initialisées
misc.cc(1157): error C2065: 'it' : identificateur non déclaré
misc.cc(1157): fatal error C1003: le nombre d'erreurs est supérieur à 100 ; arrêt de la compilation
make: *** [Makefile.vcc:22 : misc.obj] Erreur 2

avec ajout de :

Code : Tout sélectionner

#define NO_UNARY_FUNCTION_COMPOSE
compil giac_oo.lib failed :

Code : Tout sélectionner

cl.exe -DHAVE_CONFIG_H -DIN_GIAC /I. /I.. /I'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include' /EHsc /Zi /MDd /W3  /c markup.cc
Compilateur d'optimisation Microsoft (R) C/C++ version 19.29.30136 pour x64
Copyright (C) Microsoft Corporation. Tous droits réservés.

markup.cc
C:\cygwin64\home\Blandine\giac-1.7.0\src\config.h(29): warning C4005: '_DEBUG' : redéfinition de macro
markup.cc: note: voir la définition précédente de '_DEBUG'
C:\cygwin64\home\Blandine\giac-1.7.0\src\first.h(560): warning C4244: 'return' : conversion de 'double' en 'float', perte possible de données
C:\cygwin64\home\Blandine\giac-1.7.0\src\index.h(270): warning C4267: 'argument' : conversion de 'size_t' en 'int', perte possible de données
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(213): warning C4267: 'return' : conversion de 'size_t' en 'int', perte possible de données
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(520): warning C4244: 'return' : conversion de 'double' en 'int', perte possible de données
C:\cygwin64\home\Blandine\giac-1.7.0\src\graphe.h(1002): warning C4267: 'return' : conversion de 'size_t' en 'int', perte possible de données
markup.cc(1033): warning C4267: 'initialisation' : conversion de 'size_t' en 'int', perte possible de données
markup.cc(1794): warning C4267: 'initialisation' : conversion de 'size_t' en 'int', perte possible de données
markup.cc(1825): warning C4244: '=' : conversion de '__int64' en 'int', perte possible de données
markup.cc(1833): warning C4244: '=' : conversion de '__int64' en 'int', perte possible de données
markup.cc(2566): warning C4267: 'initialisation' : conversion de 'size_t' en 'int', perte possible de données
markup.cc(3172): warning C4267: 'initialisation' : conversion de 'size_t' en 'int', perte possible de données
markup.cc(3387): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
markup.cc(3387): error C2146: erreur de syntaxe : absence de '>' avant l'identificateur 'unary_function_user'
markup.cc(3388): error C2143: erreur de syntaxe : absence de ';' avant '{'
markup.cc(3484): warning C4267: '=' : conversion de 'size_t' en 'int', perte possible de données
markup.cc(3485): warning C4267: '=' : conversion de 'size_t' en 'int', perte possible de données
markup.cc(3486): warning C4267: '=' : conversion de 'size_t' en 'int', perte possible de données
make: *** [Makefile.vcc:22 : markup.obj] Erreur 2
Je n'ai pas trop d'idées pour avancer maintenant.

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par parisse » ven. nov. 19, 2021 9:57 am

Bon, si la compilation avec les flags de la HP Prime fonctionnent moins bien, il vaut mieux partir des flags qui permettent de compiler.
Je dirais qu'avant de lancer simplify, il faudrait deja tester si les variables et les commandes fonctionnent. Donc commencer par evaluer x et voir si ca renvoie bien x. Si oui, on peut passer aux commandes, en commencant par une commande qui ne fera pratiquement rien, par exemple sin(x), ou x+y puis des trucs simples du genre sin(-x), sin(pi).
Je suggere aussi de creer l'executable depuis l'IDE de Visual c++ (avec un fichier de projet). Ceci afin de lancer le programme depuis l'IDE, comme ca quant il plante, le debuggueur va ouvrir le fichier source la ou l'erreur s'est produite. Et ca permet de mettre des breakpoints. Il sera peut-etre aussi necessaire de creer l'executable avec tous les fichiers sources de giac, sans linker avec giac_oo.lib.

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par cdeval » ven. nov. 19, 2021 12:47 pm

Ok je vais repartir sur les Flags qui compilent.
J'ai testé les trucs simples, tout fonctionne :

Code : Tout sélectionner

$ ./giac_oo.exe
Expression: x:=1
1
Expression: sin(x)
sin(1)
Expression: evalf(sin(1),20)
0.84147098480789650665
Expression: sin(pi)
0
Expression: eval(x)
1
Expression: x+y
1+y
Expression: simplifier(x+y)
y+1
Expression: sin(-x)
-sin(1)
J'avais déjà fait un débogage simple dans l'IDE sur l'exécutable. Voilà le fichier vector qui renvoie l'erreur (fichier MSVC) :
Screen Shot 11-19-21 at 01.31 PM.PNG
Screen Shot 11-19-21 at 01.31 PM.PNG (253.88 Kio) Consulté 3135 fois
et j'avais identifié la pile des appels et le dernier fichier giac de la pile :
Screen Shot 11-19-21 at 01.36 PM.PNG
Screen Shot 11-19-21 at 01.36 PM.PNG (263.24 Kio) Consulté 3135 fois
Je vais essayer de faire ce week-end un programme minimal qui provoque l'erreur, compilé directement dans l'IDE sans faire appel à la librairie.
Il faut que j'y travaille car je découvre MSVC...

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par parisse » sam. nov. 20, 2021 6:46 am

Au vu du screenshot, je pense qu'on peut resoudre ce probleme en ajoutant le flag de compilation
#define _ITERATOR_DEBUG_LEVEL 0

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par cdeval » dim. nov. 21, 2021 9:47 pm

parisse a écrit :
sam. nov. 20, 2021 6:46 am
Au vu du screenshot, je pense qu'on peut resoudre ce probleme en ajoutant le flag de compilation
#define _ITERATOR_DEBUG_LEVEL 0
Bien vu !
Le compilateur MS donne par défaut la valeur 2 à ce Flag en mode Debug, il faut donc le forcer à 0.
Même si ça reste curieux pour moi que selon le niveau de debug, une erreur disparaisse, je n'ai plus de plantage et giac tourne en mode x64 :P :

Code : Tout sélectionner

$ ./giac_oo.exe
Expression: 1+2
3
Expression: simplifier(x+y)
x+y
Expression: f(x):=x^2
// Parsing f
// Success
// compiling f
 (x)->x^2
Expression: version()
"giac 1.7.0, (c) B. Parisse and R. De Graeve, Institut Fourier, Universite de Grenoble I"
Merci donc pour ce déblocage.
J'ai testé ensuite le mode python car l'un des intérêts de mon extension LO est de pouvoir définir une fonction GIAC qui sera utilisable dans le tableur de LO. J'aimerais y ajouter le support de Python. J'ai donc essayé en ligne de commande et ça semble dysfonctionner :

Code : Tout sélectionner

Expression: python_compat(1)
1
Expression: [j for j in range(50)]
Warning adding 1 ] at end of input
[j]
Expression: 'for'
Expression: j
Expression: :1: syntax error  line 1 col 1 at in in

"member(undef,undef)
 Error: Bad Argument Value"
Expression: Too many ]
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]
Expression: python_compat(0)
0
Expression: [j for j in range(50)]
Warning adding 1 ] at end of input
[j]
Expression: 'for'
Expression: j
Expression: :1: syntax error  line 1 col 1 at in in

"member(undef,undef)
 Error: Bad Argument Value"
Expression: Too many ]
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]
Peut-être n'ai-je pas tous inclus tous les programmes nécessaires dans la librairie ?
J'ai repris ceux de mon extension de 2009 (giac v0.8.3) et complété avec ceux du Makefile.win64 :

Code : Tout sélectionner

GIACOBJS = input_lexer.obj sym2poly.obj gausspol.obj threaded.obj maple.obj ti89.obj mathml.obj moyal.obj misc.obj permu.obj quater.obj desolve.obj input_parser.obj symbolic.obj index.obj modpoly.obj modfactor.obj ezgcd.obj derive.obj solve.obj intg.obj intgab.obj risch.obj lin.obj series.obj subst.obj vecteur.obj sparse.obj csturm.obj tex.obj ifactor.obj alg_ext.obj gauss.obj isom.obj help.obj plot.obj plot3d.obj rpn.obj prog.obj pari.obj cocoa.obj optimization.obj signalprocessing.obj lpsolve.obj nautywrapper.obj graphe.obj graphtheory.obj markup.obj TmpLESystemSolver.obj TmpFGLM.obj unary.obj usual.obj identificateur.obj gen.obj tinymt32.obj global.obj caseval.obj graphic.obj libregexp.obj libunicode.obj qjsgiac.obj quickjs.obj quickjs-libc.obj
Y en a-t-il qui manquent ?
En particulier, j'ai enlevé cutils, libbf et js qui donnent des erreurs pendant la compilation mais qui n'ont pas été bloquants pour obtenir ma librairie giac_oo. Faut-il que j'approfondisse la compilation de ces trois fichiers ?
A bientôt

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par parisse » lun. nov. 22, 2021 11:45 am

cdeval a écrit :
dim. nov. 21, 2021 9:47 pm
J'ai testé ensuite le mode python car l'un des intérêts de mon extension LO est de pouvoir définir une fonction GIAC qui sera utilisable dans le tableur de LO. J'aimerais y ajouter le support de Python. J'ai donc essayé en ligne de commande et ça semble dysfonctionner :
Pour le support Python, il s'agit de la syntaxe compatible Python de Giac, a ne pas confondre avec l'interpreteur MicroPython inclus dans giac.
Les erreurs sont curieuses, c'est peut-etre lie a l'utilisation du contexte global nul. Il faudrait essayer de remplacer les ...,0) passes en dernier argument par ...,&ctx) apres avoir declare hors de la boucle giac::context ctx;

Code : Tout sélectionner

int main(){
  std::string s;
  giac::context ctx;
  for (;;){
    std::cout << "Expression: " ;
    std::cin >> s;
    giac::gen g(s,&ctx);
    if (is_zero(g))
      return 0;
    g=giac::protecteval(g,1,&ctx);
    std::cout << g.print(&ctx) << std::endl;
  }
}
Sinon, il faudra mettre un point d'arret dans try_parse pour essayer de comprendre ce qui ne va pas.
Peut-être n'ai-je pas tous inclus tous les programmes nécessaires dans la librairie ?
J'ai repris ceux de mon extension de 2009 (giac v0.8.3) et complété avec ceux du Makefile.win64 :

Code : Tout sélectionner

GIACOBJS = input_lexer.obj sym2poly.obj gausspol.obj threaded.obj maple.obj ti89.obj mathml.obj moyal.obj misc.obj permu.obj quater.obj desolve.obj input_parser.obj symbolic.obj index.obj modpoly.obj modfactor.obj ezgcd.obj derive.obj solve.obj intg.obj intgab.obj risch.obj lin.obj series.obj subst.obj vecteur.obj sparse.obj csturm.obj tex.obj ifactor.obj alg_ext.obj gauss.obj isom.obj help.obj plot.obj plot3d.obj rpn.obj prog.obj pari.obj cocoa.obj optimization.obj signalprocessing.obj lpsolve.obj nautywrapper.obj graphe.obj graphtheory.obj markup.obj TmpLESystemSolver.obj TmpFGLM.obj unary.obj usual.obj identificateur.obj gen.obj tinymt32.obj global.obj caseval.obj graphic.obj libregexp.obj libunicode.obj qjsgiac.obj quickjs.obj quickjs-libc.obj
Y en a-t-il qui manquent ?
En particulier, j'ai enlevé cutils, libbf et js qui donnent des erreurs pendant la compilation mais qui n'ont pas été bloquants pour obtenir ma librairie giac_oo. Faut-il que j'approfondisse la compilation de ces trois fichiers ?
Je ne pense pas, ce sont des fichiers necessaires a l'utilisation de l'interpreteur javascript QuickJS inclus dans giac (ils devraient compiler aussi mais il faut sans doute mettre les bons flags de compilation). Les fichiers caseval.obj graphic.obj libregexp.obj libunicode.obj qjsgiac.obj quickjs.obj quickjs-libc.obj ne sont pas necessaires non plus.

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par cdeval » lun. nov. 22, 2021 2:31 pm

Ok pour les fichiers superflus, je les ai supprimés.
Pour cutils.h cutils.cc, le problème concerne des fonctions n'existant pas dans MSVC et dont il faut trouver des équivalents.
J'avais commencé la conversion et presque terminé la compilation mais je laisse tomber puisqu'ils ne me sont pas nécessaires visiblement.

Pour le problème de la commande Python, j'ai ajouté la variable context mais ça ne change rien.
J'ai pu approfondir un peu et cela ne semble pas lié à la syntaxe Python mais plutôt à un problème de prise en compte du caractère espace.

Code : Tout sélectionner

Expression: [1 ]
Warning adding 1 ] at end of input
[1]
Expression: Too many ]
:2: syntax error  at end of input

undef
par contre sans espace :

Code : Tout sélectionner

Expression: [1]
[1]
Expression: list(range(11))
[0,1,2,3,4,5,6,7,8,9,10]
donc il s'agirait de regarder ce qui se passe dans try_parse de gen.cc entre les lignes 11979 et 12015, c'est bien ça ?

Code : Tout sélectionner

  static int try_parse(const string & s_orig,GIAC_CONTEXT){
    string s=s_orig;
    if (1 || abs_calc_mode(contextptr)!=38){
      // remove leading spaces
      for (int i=0;i<s.size();++i){
	if (s[i]!=' '){
	  if (i)
	    s=s.substr(i,s.size()-i);
	  break;
	}
      }
      if (s.size()>10 && (s.substr(0,5)=="\"def " || s.substr(0,10)=="\"function ")){
	string news="";
	int ss=s.size()-1;
	for (;ss>5;--ss){
	  if (s[ss]=='"')
	    break;
	}
	for (int i=1;i<ss;++i){
	  char ch=s[i];
	  if (ch==char(0xa)){
	    news+='\n';
	    continue;
	  }
	  if (ch=='"' && s[i+1]=='"')
	    ++i;
	  if (ch=='`')
	    news+='"';
	  else
	    news+=ch;
	}
	s=news;
      }
      s=python2xcas(s,contextptr);
      if (s.empty()){
	parsed_gen(undef,contextptr);
	return 1;
      }
    }

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par parisse » lun. nov. 22, 2021 3:50 pm

C'est python2xcas qui contient le code de conversion de syntaxe Python vers Xcas donc apres l'execution de la ligne s=python2xcas(s,contextptr); on doit avoir dans s l'equivalent Xcas du [j for j in range(...)].
Curieux cette histoire d'espace. Mais en regardant la valeur de s on devrait reperer pourquoi ce n'est pas reconnu, l'espace devant apparaitre comme le code ascii 32.

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par cdeval » lun. nov. 22, 2021 10:11 pm

Problème résolu.
Giac et python n'étaient pas en cause.
C'est la ligne de commande qui considère chaque espace comme une séparation entre 2 chaines.
J'ai utilisé std::getline et cela a résolu le problème :

Code : Tout sélectionner

int main(){
  std::string s;
  giac::context ctx;
  for (;;){
    std::cout << "Expression : " ;
    std::getline(std::cin,s);
    std::cout << "Contenu de s : " << s << std::endl;
    giac::gen g(s,&ctx);
    if (is_zero(g))
      return 0;
    g=giac::protecteval(g,1,&ctx);
    std::cout << "Sortie giac : " << g.print(&ctx) << std::endl;
  }
}
plus de souci :

Code : Tout sélectionner

$ ./giac_oo.exe
Expression : [j for j in range(10)]
Contenu de s : [j for j in range(10)]
Sortie giac : [0,1,2,3,4,5,6,7,8,9]
Je vais pouvoir finaliser ma version windows.
Par ailleurs j'ai pu modifier mon code LO pour tenir compte des fonctions définies en python.
Ca fonctionne bien : ces fonctions deviennent ensuite utilisables dans le tableur. C'est ce que je voulais :P
Je posterai des copies d'écran dans quelques jours sur cette nouvelle fonctionnalité dès que j'aurai fini quelques finitions ainsi que le lien pour télécharger mon extension LO.
Encore merci !
à bientôt.

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par parisse » mar. nov. 23, 2021 5:50 am

Bravo!
Qu'est-ce qui pourrait interesser d'autres developpeurs sous msvc? La librairie, les headers et giac_oo.cpp sans doute ? Ca pourrait etre un kit de demarrage CAS...

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par cdeval » mar. nov. 23, 2021 9:39 pm

parisse a écrit :
mar. nov. 23, 2021 5:50 am
Bravo!
Qu'est-ce qui pourrait intéresser d'autres developpeurs sous msvc? La librairie, les headers et giac_oo.cpp sans doute ? Ca pourrait etre un kit de demarrage CAS...
Effectivement la version de Giac que j'ai compilée sous MSVC pourrait intéresser. Je n'avais pas le choix du compilateur du fait de l'appel de ma librairie par LO qui est lui-même compilé avec MSVC. Mais j'y vois un gros avantage : Giac tourne en mode 64 bits natif sans surcouche cygwin. Je n'ai pas fait de tests de performance, mais il ne serait pas impossible que, sous windows, du calcul formel dans le tableur de LO tourne plus vite que dans le tableur intégré de XCAS ! Par curiosité, je ferai le test quand j'aurai terminé ma mise à jour.

Pour construire la librairie giac et l'utiliser, il suffit de suivre ce que j'ai écris dans mon premier post.

Cygwin64 ne sert qu'à lancer le makefile.vcc que voici (après avoir modifié le code source de giac et compilé mpir et mpfr comme je l'ai indiqué dans mon premier post) :

Code : Tout sélectionner

# compil make -f Makefile.vcc
#-*- mode:Makefile -*-

#mode debug
#CXXFLAGS = -DHAVE_CONFIG_H -DIN_GIAC /I. /I.. /I'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include' /EHsc /Zi /MDd /W3 # /D "_UNICODE" /D "UNICODE" -pg

#mode release
CXXFLAGS = -DHAVE_CONFIG_H -DIN_GIAC /I. /I.. /I'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include' /EHsc /MD /W3 # /D "_UNICODE" /D "UNICODE" -pg

CXX=cl.exe

GIACOBJS = input_lexer.obj sym2poly.obj gausspol.obj threaded.obj maple.obj ti89.obj mathml.obj moyal.obj misc.obj permu.obj quater.obj desolve.obj input_parser.obj symbolic.obj index.obj modpoly.obj modfactor.obj ezgcd.obj derive.obj solve.obj intg.obj intgab.obj risch.obj lin.obj series.obj subst.obj vecteur.obj sparse.obj csturm.obj tex.obj ifactor.obj alg_ext.obj gauss.obj isom.obj help.obj plot.obj plot3d.obj rpn.obj prog.obj pari.obj cocoa.obj optimization.obj signalprocessing.obj lpsolve.obj nautywrapper.obj graphe.obj graphtheory.obj markup.obj TmpLESystemSolver.obj TmpFGLM.obj unary.obj usual.obj identificateur.obj gen.obj tinymt32.obj global.obj

giac_oo.lib:   $(GIACOBJS) first.obj
	lib /out:giac_oo.lib $(GIACOBJS) first.obj 
%.obj:	%.cc
	$(CXX) $(CXXFLAGS) /c $<
clean:
	rm -f $(GIACOBJS) $(OBJS) giac_oo.lib
Pour tester la librairie, il suffit de compiler le giac_oo.cpp que voici :

Code : Tout sélectionner

// -*- compile-command Debug : "cl /Zi /MDd /I. /EHsc giac_oo.cpp giac_oo.lib mpfr.lib mpir.lib" -*-
// -*- compile-command Release : "cl /MD /I. /EHsc giac_oo.cpp giac_oo.lib mpfr.lib mpir.lib" -*-

#include <giac/config.h>
#include <giac/gen.h>
#include <giac/prog.h>

int main(){
  std::string s;
  giac::context ctx;
  for (;;){
    std::cout << "Expression : " ;
    std::getline(std::cin,s);
    giac::gen g(s,&ctx);
    if (is_zero(g))
      return 0;
    g=giac::protecteval(g,1,&ctx);
    std::cout << "Sortie giac : " << g.print(&ctx) << std::endl;
  }
}
L'idéal serait de fournir une "solution" clé en main pour compiler la librairie dans l'IDE de MSVC, comme c'est fait pour mpir et mpfr mais je n'y connais pratiquement rien dans MSVC. Si j'ai le temps de m'y mettre pourquoi pas...

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par parisse » dim. juil. 16, 2023 2:08 pm

Je viens de mettre en téléchargement une archive permettant de compiler giac_oo.lib avec Visual Studio 2022, testée avec WSL. Si quelqu'un peut tester...
https://www-fourier.univ-grenoble-alpes ... iacvcc.tgz

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

Re: Extension LibreOffice : bug de Giac compilé avec MSVC19

Message par cdeval » mar. juil. 18, 2023 12:37 pm

Super !
Je vais tester ça.
Je vois que tu es passé par WSL. MinGW n'aurait pas suffit ?

Répondre