µ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 ?
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.
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.
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
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
-- 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...
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
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
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 :
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"
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
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>
struct stat * restrict __statbuf);
avec un restrict à transformer en __restrict__
pour répondre à ta question, dans <time.h> il manque
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.
Citer : Posté le 27/02/2022 13:41 | #
Tu peux décoder ce que c'est avec 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.
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
>> 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.
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 :
mais note que le compilateur le fait tout seul dans la plupart de ses messages ; par exemple là
Le nom de la fonction est déjà décodé.
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
il faut linker avec au minimum les options
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 :
{
public:
Classe();
virtual ~Classe();
...
};
qu'il convient donc de remplacer par un :
{
public:
Classe();
~Classe();
...
};
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) :
On peut alors utiliser classiquement un (comme avec la STL) via par exemple :
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 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.
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
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++ )
Citer : Posté le 05/02/2023 15:43 | #
Bonjour j'ai essayé de compiler avec uSTL 2.3 et ça ne marche pas j'ai une erreur avec vector et l'aadin d'exemple sur gitea a la meme erreur...
Est-ce que quelqu'un saurais pourquoi ?
Cordialement
Citer : Posté le 05/02/2023 15:45 | #
C'est certainement une punition pour avoir cru qu'on devinait les problèmes sans connaître le message d'erreur, sans voir ton CMakeLists.txt, et sans voir les commandes de compilation qui sont affichées quand tu compiles avec fxsdk build-{fx,cg} VERBOSE=1.
Citer : Posté le 05/02/2023 15:46 | #
Pour l'instant j'essaye de compiler l'exemple qui est sur Gitea.
# toolchain file and module path of the fxSDK
cmake_minimum_required(VERSION 3.15)
project(MyAddin)
include(GenerateG3A)
include(Fxconv)
find_package(Gint 2.4 REQUIRED)
set(SOURCES
src/main.cc
# ...
)
set(ASSETS_cg
# ...
)
fxconv_declare_assets(${ASSETS_cg} WITH_METADATA)
add_executable(myaddin ${SOURCES} ${ASSETS_${FXSDK_PLATFORM}})
target_compile_options(myaddin PRIVATE -Wall -Wextra -Os -std=c++11 -c -fno-rtti -fno-use-cxa-atexit)
target_link_libraries(myaddin Gint::Gint -lustl -lc)
target_link_options(myaddin PRIVATE -Wl,-Map=map)
if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
generate_g3a(TARGET myaddin OUTPUT "TestUSTL.g3a"
NAME "STL Test" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png)
endif()
et j'ai l'erreur :
[ 50%] Building CXX object CMakeFiles/myaddin.dir/src/main.cc.obj
/root/dev casio/ustl_2.3_addin_example/src/main.cc:7:10: fatal error: uvector.h: No such file or directory
7 | #include <vector>
| ^~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/myaddin.dir/build.make:63: CMakeFiles/myaddin.dir/src/main.cc.obj] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/myaddin.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
Citer : Posté le 05/02/2023 15:50 | #
Tu l'as installée comment, la µSTL ?
Avant de partir trop loin : depuis le fxSDK 2.9.0 d'Août dernier (dont la mise à jour nécessite une réinstallation), la bibliothèque C++ complète est fournie avec le fxSDK donc il n'y a normalement pas besoin de µSTL. Il suffit de compiler avec -lstdc++.
Citer : Posté le 05/02/2023 15:57 | #
Ah cool ! Je croyais avoir la derniere version du fxsdk. Il faut aussi mettre à jour gint ? (je suis en train de le mettre à jour)
Citer : Posté le 05/02/2023 15:58 | #
La mise à jour 2.9.0 requiert (exceptionnellement) de tout réinstaller, comme tu l'as vu dans les instructions, donc oui il faut évidemment mettre à jour gint avec.