Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » µSTL pour Casio Graph 90+E avec fxsdk gint
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

µSTL pour Casio Graph 90+E avec fxsdk gint

Posté le 24/02/2022 12:44

Hello,

j'essaie (tant bien que mal) de faire fonctionner la µSTL (v 2.1 pour le moment, on verra par la suite si on peut tendre vers la v 3.0 qui vient de sortir) avec le fxSDK/Gint.

Je suis partie de l'implémentation de Pavel et ai modifié qq petits trucs pour que ça compile sur Gint, mais relativement peux de choses étaient à reprendre (principalement dans fstream.cc) ou un syscall à BFile_GetFileSize a du etre remplacé par BFile_Size de gint/bfile.h et la definition de deux constantes de errno.h absentes EINTR et EAGAIN (j'ai repris les valeurs adhoc d'une implémentation sur PC de manière un peu arbitraire, juste pour que ca passe).

Avec ces quelques modifs, la compilation de la libustl.a passe (avec -std=c++11).

Je copie donc la libustl.a dans le compilo (gcc.11.1.0 à coté de libc.a et libgcc.a ...) et les headers dans le dossier include du compilo

Là ou ça se complique c'est lors de la création d'un Addins de test

un coup de
fxsdk new testustl
pour créer le projet

Je renomme le "main.c" en "main.cc" pour que le compilo passe en C++ (juste au cas où, a priori pas nécessaire, mais sait on jamais)
un coup d'edition de CmakeLists.txt (je joins la version light, focalisée sur la CG50) ouù j'édite la ligne de compilation et de linkage :


target_compile_options(myaddin PRIVATE -Wall -Wextra -Os -std=c++11)
target_link_libraries(myaddin Gint::Gint -lustl -lc)


et là c'est le drame :

erreur de linkage : reference indéfinie vers "_stderr" dans la fonction ___assert_fail de la libc.


sylvain@SlyPC:~/Programmes/Casio/testustl$ fxsdk build-cg VERBOSE=1
-- The C compiler identification is GNU 11.1.0
-- The CXX compiler identification is GNU 11.1.0
-- Check for working C compiler: /home/sylvain/.local/bin/sh-elf-gcc
-- Check for working C compiler: /home/sylvain/.local/bin/sh-elf-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /home/sylvain/.local/bin/sh-elf-g++
-- Check for working CXX compiler: /home/sylvain/.local/bin/sh-elf-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Gint: TRUE (found suitable version "2.7.0", minimum required is "2.1")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sylvain/Programmes/Casio/testustl/build-cg
/usr/bin/cmake -S/home/sylvain/Programmes/Casio/testustl -B/home/sylvain/Programmes/Casio/testustl/build-cg --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles /home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make -f CMakeFiles/myaddin.dir/build.make CMakeFiles/myaddin.dir/depend
cd /home/sylvain/Programmes/Casio/testustl/build-cg && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/sylvain/Programmes/Casio/testustl /home/sylvain/Programmes/Casio/testustl /home/sylvain/Programmes/Casio/testustl/build-cg /home/sylvain/Programmes/Casio/testustl/build-cg /home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/myaddin.dir/DependInfo.cmake --color=
Dependee "/home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/myaddin.dir/DependInfo.cmake" is newer than depender "/home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/myaddin.dir/depend.internal".
Dependee "/home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/sylvain/Programmes/Casio/testustl/build-cg/CMakeFiles/myaddin.dir/depend.internal".
Scanning dependencies of target myaddin
make -f CMakeFiles/myaddin.dir/build.make CMakeFiles/myaddin.dir/build
[ 33%] Building CXX object CMakeFiles/myaddin.dir/src/main.cc.obj
/home/sylvain/.local/bin/sh-elf-g++  -DFXCG50 -DTARGET_FXCG50 -isystem /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/./include/openlibm  -m4-nofpu -mb -ffreestanding -nostdlib -Wa,--dsp -Wall -Wextra -Os -std=c++11 -fstrict-volatile-bitfields -o CMakeFiles/myaddin.dir/src/main.cc.obj -c /home/sylvain/Programmes/Casio/testustl/src/main.cc
[ 66%] Building FXCONV object CMakeFiles/myaddin.dir/assets-cg/example.png
fxconv /home/sylvain/Programmes/Casio/testustl/assets-cg/example.png -o CMakeFiles/myaddin.dir/assets-cg/example.png --toolchain=sh-elf --cg
[100%] Linking CXX executable myaddin
/usr/bin/cmake -E cmake_link_script CMakeFiles/myaddin.dir/link.txt --verbose=1
/home/sylvain/.local/bin/sh-elf-g++    -nostdlib -T fxcg50.ld -lgcc CMakeFiles/myaddin.dir/src/main.cc.obj CMakeFiles/myaddin.dir/assets-cg/example.png  -o myaddin  -lgcc -lgcc /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libgint-cg.a -lustl -lc /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libc.a /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libgint-cg.a /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libc.a -lopenlibm -lgcc
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libc.a(assert.c.obj) : dans la fonction « ___assert_fail » :
assert.c:(.text+0x1c) : référence indéfinie vers « _stderr »
collect2: erreur: ld a retourné le statut de sortie 1
make[2]: *** [CMakeFiles/myaddin.dir/build.make:98 : myaddin] Erreur 1
make[1]: *** [CMakeFiles/Makefile2:76 : CMakeFiles/myaddin.dir/all] Erreur 2
make: *** [Makefile:84 : all] Erreur 2
sylvain@SlyPC:~/Programmes/Casio/testustl$


Une idée sur la cause du problème ?


Parisse Hors ligne Membre Points: 374 Défis: 0 Message

Citer : Posté le 25/02/2022 14:06 | #


Ca serait en effet tres bien d'avoir une version propre de la uSTL, celle que j'utilise a ete faite a l'arrache.
Si ma memoire est bonne, j'ai eu des problemes avec reverse (et peut-etre aussi avec sort), mais peut-etre dus a des bugs dans la libfxcg que j'utilise.
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 25/02/2022 20:07 | #


J'ai essayé de compiler la v3.0 de la µSTL. J'ai réussi à produire la lib moyennant quelques modifications (notamment bypasser <uchrono.h> car il manque pas mal de trucs dans <time.h> et une réduction assez violente de fstream). Par contre j'ai pas réussi à linker avec mon addin

Parmi les modifications à conduire sur la v3.0, les codes 'errno' sont à épurer (a priori OK désormais), il faut compiler en std=c++14 (le c++11 ne passe pas et le c++98 encore moins). Il y a pas mal de try/catch à bypasser aussi car la compile avec un flag "-fexceptions" ne se fait pas.

Je pense que c'est faisable d'avoir la v3.0 fonctionnelle, mais ça risque de prendre pas mal de temps.
Pour le moment, la v2.3 semble bien se comporter, je vais donc utiliser celle-là dans un premier temps, mais sans perdre de vue l'objectif de tenter de faire fonctionner la v3.0.
Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 25/02/2022 21:45 | #


Merci pour tout ça. J'aurais plutôt tendance à faire confiance à uSTL, pour reverse() vu que de loin ça utilise memcpy() et que celui de libfxcg est plus ou moins buggé ça semble être le plus probable.

Merci d'avoir regardé pour la version 3. Oui le C++14 est absolument nécessaire c'est noté dans le changelog. Les exceptions sont un assez gros truc, ne te sens pas obligé de regarder. Si tu peux déjà coder ton projet actuel avec la 2.3 c'est bien
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 25/02/2022 21:47 | #


En fait je suis dessus, j'ai compilé la lib en v3.0
par contre je coince dans le linkage de mon projet

j'ai ces messages d'erreur que je sais pas identifier

sylvain@SlyPC:~/Programmes/Casio/testustl3$ fxsdk build-cg VERBOSE=1
-- The C compiler identification is GNU 11.1.0
-- The CXX compiler identification is GNU 11.1.0
-- Check for working C compiler: /home/sylvain/.local/bin/sh-elf-gcc
-- Check for working C compiler: /home/sylvain/.local/bin/sh-elf-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /home/sylvain/.local/bin/sh-elf-g++
-- Check for working CXX compiler: /home/sylvain/.local/bin/sh-elf-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Gint: TRUE (found suitable version "2.7.0-8", minimum required is "2.1")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sylvain/Programmes/Casio/testustl3/build-cg
/usr/bin/cmake -S/home/sylvain/Programmes/Casio/testustl3 -B/home/sylvain/Programmes/Casio/testustl3/build-cg --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/sylvain/Programmes/Casio/testustl3/build-cg/CMakeFiles /home/sylvain/Programmes/Casio/testustl3/build-cg/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make -f CMakeFiles/myaddin.dir/build.make CMakeFiles/myaddin.dir/depend
cd /home/sylvain/Programmes/Casio/testustl3/build-cg && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/sylvain/Programmes/Casio/testustl3 /home/sylvain/Programmes/Casio/testustl3 /home/sylvain/Programmes/Casio/testustl3/build-cg /home/sylvain/Programmes/Casio/testustl3/build-cg /home/sylvain/Programmes/Casio/testustl3/build-cg/CMakeFiles/myaddin.dir/DependInfo.cmake --color=
Dependee "/home/sylvain/Programmes/Casio/testustl3/build-cg/CMakeFiles/myaddin.dir/DependInfo.cmake" is newer than depender "/home/sylvain/Programmes/Casio/testustl3/build-cg/CMakeFiles/myaddin.dir/depend.internal".
Dependee "/home/sylvain/Programmes/Casio/testustl3/build-cg/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/sylvain/Programmes/Casio/testustl3/build-cg/CMakeFiles/myaddin.dir/depend.internal".
Scanning dependencies of target myaddin
make -f CMakeFiles/myaddin.dir/build.make CMakeFiles/myaddin.dir/build
[ 33%] Building CXX object CMakeFiles/myaddin.dir/src/main.cc.obj
/home/sylvain/.local/bin/sh-elf-g++  -DFXCG50 -DTARGET_FXCG50 -isystem /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/./include/openlibm  -m4-nofpu -mb -ffreestanding -nostdlib -Wa,--dsp -Os -m4a-nofpu -mhitachi -std=c++14 -fno-strict-aliasing -fno-exceptions -fstrict-volatile-bitfields -o CMakeFiles/myaddin.dir/src/main.cc.obj -c /home/sylvain/Programmes/Casio/testustl3/src/main.cc
[ 66%] Building FXCONV object CMakeFiles/myaddin.dir/assets-cg/example.png
fxconv /home/sylvain/Programmes/Casio/testustl3/assets-cg/example.png -o CMakeFiles/myaddin.dir/assets-cg/example.png --toolchain=sh-elf --cg
[100%] Linking CXX executable myaddin
/usr/bin/cmake -E cmake_link_script CMakeFiles/myaddin.dir/link.txt --verbose=1
/home/sylvain/.local/bin/sh-elf-g++    -nostdlib -Wl,-Map=map -T fxcg50.ld -lgcc CMakeFiles/myaddin.dir/src/main.cc.obj CMakeFiles/myaddin.dir/assets-cg/example.png  -o myaddin  -lgcc -lgcc /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libgint-cg.a -lustl3 -lc /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libc.a /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libgint-cg.a /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libc.a -lopenlibm -lgcc
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libustl3.a(memblock.o):(.rodata._ZTIN4ustl8cmemlinkE[_ZTIN4ustl8cmemlinkE]+0x0) : référence indéfinie vers « __ZTVN10__cxxabiv117__class_type_infoE »
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libustl3.a(memblock.o):(.rodata._ZTIN4ustl7memlinkE[_ZTIN4ustl7memlinkE]+0x0) : référence indéfinie vers « __ZTVN10__cxxabiv120__si_class_type_infoE »
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libustl3.a(memblock.o):(.rodata._ZTIN4ustl8memblockE[_ZTIN4ustl8memblockE]+0x0) : référence indéfinie vers « __ZTVN10__cxxabiv120__si_class_type_infoE »
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libustl3.a(mistream.o):(.rodata._ZTIN4ustl8ios_baseE[_ZTIN4ustl8ios_baseE]+0x0) : référence indéfinie vers « __ZTVN10__cxxabiv117__class_type_infoE »
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libustl3.a(mistream.o):(.rodata._ZTIN4ustl7istreamE[_ZTIN4ustl7istreamE]+0x0) : référence indéfinie vers « __ZTVN10__cxxabiv121__vmi_class_type_infoE »
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libustl3.a(mistream.o):(.rodata._ZTIN4ustl7ostreamE[_ZTIN4ustl7ostreamE]+0x0) : référence indéfinie vers « __ZTVN10__cxxabiv121__vmi_class_type_infoE »
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libustl3.a(ustring.o):(.rodata._ZTIN4ustl6stringE[_ZTIN4ustl6stringE]+0x0) : référence indéfinie vers « __ZTVN10__cxxabiv120__si_class_type_infoE »
/home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/../../../../sh3eb-elf/bin/ld : /home/sylvain/.local/share/giteapc/Lephenixnoir/sh-elf-gcc/lib/gcc/sh3eb-elf/11.1.0/libustl3.a(sostream.o):(.rodata._ZTIN4ustl13ostringstreamE[_ZTIN4ustl13ostringstreamE]+0x0) : référence indéfinie vers « __ZTVN10__cxxabiv120__si_class_type_infoE »
collect2: erreur: ld a retourné le statut de sortie 1
make[2]: *** [CMakeFiles/myaddin.dir/build.make:98 : myaddin] Erreur 1
make[1]: *** [CMakeFiles/Makefile2:76 : CMakeFiles/myaddin.dir/all] Erreur 2
make: *** [Makefile:84 : all] Erreur 2
sylvain@SlyPC:~/Programmes/Casio/testustl3$


Ajouté le 25/02/2022 à 21:48 :
J'ai cherché a quoi ca correspond, je trouve que c'est en rapport avec la libstdcxx.
Mais là je coince...
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 25/02/2022 22:04 | # | Fichier joint


Pour archive je mets en PJ ou j'en suis, je pense que le probleme vient des options de compilation.

uSTL3.0.zip :
- tout le stuff pour compiler la libustl3 et les fichiers include (à copier dans le compilo). Ca compile avec un makefile, à l'ancienne
- l'addin pour tester (testustl3): le fameux qui ne veut pas linker qui compile via le fxsdk build-cg
Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 25/02/2022 22:06 | #


Merci, je testerai ça à un moment. Aussi j'ai oublié de dire mais c'est décevant pour time.h, j'ai implémenté tout le C99 pourtant. Il doit en attendre plus, zut. C'est chiant à faire les fonctions sur le temps
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 25/02/2022 22:10 | # | Fichier joint


Et voici le meme packahe en zip, de la v2.3 qui fonctionne.
Meme architecture d'archive.
j'ai testé les containers et les strings, par contre tout ce qui est streams, j'ai fait aucun test

Ajouté le 25/02/2022 à 22:12 :
Lephenixnoir a écrit :
Merci, je testerai ça à un moment. Aussi j'ai oublié de dire mais c'est décevant pour time.h, j'ai implémenté tout le C99 pourtant. Il doit en attendre plus, zut. C'est chiant à faire les fonctions sur le temps


Oui l'erreur porte sur

size_t strftime(char * restrict __s, size_t __maxsize,
const char * restrict __format, const struct tm * restrict __time);

il aime pas le "char * restrict __s"
Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 25/02/2022 22:14 | #


Ah lol ça c'est pas un problème du tout. J'ai juste oublié que pour être compatible avec la syntaxe C++ il faut écrire __restrict__. C'est déjà arrivé : https://gitea.planet-casio.com/Vhex-Kernel-Core/fxlibc/commit/518a866750105d2f90e4a78e3641a15c6c764952
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 25/02/2022 22:16 | #


Du coup je vais essayer de "de-shunter" <sys/stat.h> et <uchrono.h>

Par contre le probleme "final" de linkage me semble plus pénible

Ajouté le 25/02/2022 à 22:46 :
on a la meme aussi dans <stat.h>

extern int stat(char const * restrict __pathname,
    struct stat * restrict __statbuf);


avec un restrict à transformer en __restrict__

pour répondre à ta question, dans <time.h> il manque

struct timespec {
    time_t tv_sec;      // nombre de secondes
    long tv_nsec;       // nombre de nanosecondes
};


C'est facile à rajouter cette définition

il manque aussi la structure clockid_t, la définition de CLOCK_MONOTONIC et CLOCK_REALTIME et la fonction clock_gettime

Je les shunte pour voir si ca passe (c'est pour les horloges hautes résolutions, a la fin de <uchrono.h>

Ajouté le 25/02/2022 à 23:12 :
Bon en faisant le bourrin, ça compile la librairie mais j'ai toujours le problème de linkage à la fin comme qq posts plus haut.
visiblement problème de librairie

définition manquante de (cxxabi.h de stdlibcxx)
- class_type_info
- si_class_type_info
- vmi_class_type_info

Ajouté le 27/02/2022 à 13:38 :
bon j'ai aussi eu le probleme avec la µSTL 2.3
visiblement le mot clef "virtual" cause le probleme : référence indéfinie vers « __ZTVN10__cxxabiv117__class_type_infoE »
Corrigé en le retirant. A explorer plus en détail.
Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 27/02/2022 13:41 | #


Tu peux décoder ce que c'est avec c++filt :

% echo __ZTVN10__cxxabiv117__class_type_infoE | c++filt -_
vtable for __cxxabiv1::__class_type_info

Est-ce que tu compiles avec -fno-rtti ? Essaie de l'enlever et/ou d'ajouter -frtti.
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 27/02/2022 15:39 | #


non je compile avec rien.
Avec -fno-rtti ca compile pas, il y a un module qui demande typeid qui requière rtti

sylvain@SlyPC:~/Programmes/Casio/ustl-3.0$ make clean && make
>> Cleaning...
>> Compiling src/sostream.cc
>> Compiling src/ustdxept.cc
Dans le fichier inclus depuis include/uspecial.h:16,
                 depuis src/ustdxept.cc:11:
include/uctrstrm.h: Dans la fonction « ustl::istream& ustl::container_read(ustl::istream&, Container&) »:
include/uctrstrm.h:74:46: erreur: ne peut utiliser « typeid » avec « -fno-rtti »
   74 |     if (!is.verify_remaining ("read", typeid(v).name(), expectedSize))
      |                                              ^
Dans le fichier inclus depuis include/uspecial.h:18,
                 depuis src/ustdxept.cc:11:
include/uchrono.h: Dans le constructeur « constexpr ustl::chrono::hrtime_t::hrtime_t(intmax_t) »:
include/uchrono.h:182:96: attention: conversion réductrice de « (v % ((long long int)ustl::ratio<1, 1000000000>::den)) » depuis « time_t » {aka « long long int »} vers « long int » [-Wnarrowing]
  182 |     inline explicit constexpr   hrtime_t (intmax_t v)           : timespec{time_t(v/nano::den),time_t(v%nano::den)}{}
      |                                                                                                ^~~~~~~~~~~~~~~~~~~
include/uchrono.h: Dans le constructeur « constexpr ustl::chrono::hrtime_t::hrtime_t(float) »:
include/uchrono.h:183:86: attention: conversion réductrice de « (time_t)((v - (float)(time_t)v) * (float)(long long int)ustl::ratio<1, 1000000000>::den) » depuis « time_t » {aka « long long int »} vers « long int » [-Wnarrowing]
  183 |     inline explicit constexpr   hrtime_t (float v)              : timespec{time_t(v),time_t((v-time_t(v))*nano::den)}{}
      |                                                                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/uchrono.h: Dans le constructeur « constexpr ustl::chrono::hrtime_t::hrtime_t(double) »:
include/uchrono.h:184:86: attention: conversion réductrice de « (time_t)((v - (double)(time_t)v) * (double)(long long int)ustl::ratio<1, 1000000000>::den) » depuis « time_t » {aka « long long int »} vers « long int » [-Wnarrowing]
  184 |     inline explicit constexpr   hrtime_t (double v)             : timespec{time_t(v),time_t((v-time_t(v))*nano::den)}{}
      |                                                                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make: *** [Makefile:20 : src/ustdxept.o] Erreur 1


La compile avec -frtti fonctionne, mais le linkage de l'Addin avec -frtti conduit toujours à la meme erreur.

je vais essayer d'utiliser c++filt

Ajouté le 27/02/2022 à 15:56 :
bon en fait j'ai pas compris du tout comment on se sert de c++filt.
Quand tu auras le temps, explique moi le bouzin. Mais c'est pas urgent.
Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 27/02/2022 16:03 | #


Pour c++filt, c'est facile. Il lit du texte sur l'entrée standard, cherche les noms de symboles encodés, et les décode. Tu peux par exemple faire :

cat build-cg/map | c++filt -_ | less

mais note que le compilateur le fait tout seul dans la plupart de ses messages ; par exemple là

include/uchrono.h: Dans le constructeur « constexpr ustl::chrono::hrtime_t::hrtime_t(double) »:

Le nom de la fonction est déjà décodé.
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 28/02/2022 09:50 | #


Bon, donc après moultes galères, j'ai enfin réussi à compiler ET linker un programme C++ avec usage de la µSTL 2.3.

Voici quelques points à prendre en compte (on va dire que c'est mon retour d'expérience afin que les copains ne galèrent pas comme moi ...) :

il faut compiler avec au minimum les options
-std=c++11 -fno-exceptions -fno-use-cxa-atexit -frtti

il faut linker avec au minimum les options
Gint::Gint -lustl -lc
en faisant très attention à l'ordre : -lustl avant -lc, c'est important.

Pour info je suis en Gint 2.7 Dev, car il y a besoin de pas mal de choses encore non versées sur la branche Master. Notamment pour compiler la librairie auparavant.

Ensuite pour la rédaction du programme en C++ : les méthodes virtuelles ne sont pas autorisée, le linkage ne pouvant s'effectuer dès que le mot clef virtual apparaît dans les sources. (Attention car il est très souvent utilisé, notamment pour le destructeur qui est souvent défini automatiquement par les IDE dans le header par un :
class Classe
{
public:
    Classe();
    virtual ~Classe();
...
};

qu'il convient donc de remplacer par un :
class Classe
{
public:
    Classe();
    ~Classe();
...
};
sinon pas de salut au linkage final de l'addin.

Toutes les définitions de µSTL sont faites dans un namespace appelé ustl. Si on veut avoir un code "compatible" avec la STL, il convient donc de mettre dans main.cc (vous noterez l'extension "cc" (et non pas "c"), de manière à switcher sur le compilateur g++ (au lieu de gcc), même si là c'est la ceinture et les bretelles, car avec l'option -std=c++11 du compilateur vu plus haut on devrait être tranquilles) :
#define  std  ustl

On peut alors utiliser classiquement un (comme avec la STL) via par exemple :
std::vector<T> collection;
pour déclarer un conteneur de type "vector" portant sur le type "T".

Moyennant toutes ces "précautions" et ces ajustement, il est possible d'utiliser la µSTL 2.3.
Lors de mes tests, j'ai réussi à utiliser les conteneurs principaux (vector/list/array) ainsi que les chaines de caractères (string).

Par exemple:
std::string s1("Hello);
std::string s2("world");
print(1,1,"%s %s",s1.c_str(), s2.c_str() );

std::array<int, 10> tableau = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
...


Bref, c'est jouable, mais c'est vachement galère tout de même. Il faut s'armer de patience (et poser beaucoup de question à Lephé, que je remercie beaucoup au passage ). Pour servir de disclaimer, je précise que j'ai certainement dû oublier (très involontairement) certaines subtilité car vraiment le début à été compliqué.

J'essaie de faire tourner la version 3.0 de la µSTL qui offre une prise en charge meilleure de la STL, avec notamment plus de méthodes sur les conteneurs, mais sans succès à ce stade, la gestion des exceptions posant de gros problèmes au linkage (la compilation de la librairie étant a priori OK). Je ne suis hélas pas arrivé à linker mon programme à la librairie à ce jour. Si j'y arrive, je ferai un update dans le futur.
Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 03/03/2022 18:30 | #


Je note que je l'ai clônée/compilée sans problème de mon côté. Bon boulot ! Je regarderai sans doute µSTL 3.0 à un moment, mais ça fait plaisir que tu t'en sois sorti déjà rien qu'avec µSTL 2.3, tu viens de faire avancer les options de C++ avec gint d'un bon cran
Slyvtt Hors ligne Community Manager Points: 832 Défis: 0 Message

Citer : Posté le 03/03/2022 18:37 | #


cool
Tu as bien aidé aussi
Comme ça si ça peut servir (pas Yatis, je crois avoir compris qu'il a une totale aversion pour le C++ )

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 76 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd