Bonjour la liste,


Mon ordinateur de bureau tourne sous Debian/Trixie+Sid/x86-64 avec un 
processeur AMD Ryzen Threadripper 2970WX et 64Go de RAM
Et j'ai compilé avec succès GCC 16 snapshot 20250907 dessus, installé sous 
/usr/local/ comme il se doit


Je motive et élabore d'abord ma question avant de la formuler plus bas.

Considérons un logiciel libre (par exemple une bibliothèque) Debian codé[e] en 
C ou C++


Je pense en particulier à SFML (voir https://www.sfml-dev.org ....) ou 
http://www.fox-toolkit.org/
ou https://www.fltk.org/software.php?VERSION=1.5.x
mais ma question s'étend à tout logiciel libre codé en C ou C++ (et compilé par 
GCC récent, pour moi GCC 16....)

Un logiciel en C ou C++ (y compris les versions récentes de ces langages) peut 
être compilé à la fois
acec une optimisation (donc -O ou -O2) et avec les informations de déboguages 
au format DWARF (donc -g)

Dans le cas d'une bibliothèque partagée ("shared object") on va la compiler 
aussi avec -shared -fPIC
https://tldp.org/HOWTO/Program-Library-HOWTO/
https://tldp.org/HOWTO/C++-dlopen
pour pouvoir la charger avec 
https://man7.org/linux/man-pages/man3/dlopen.3.html et utiliser
https://man7.org/linux/man-pages/man3/dlsym.3.html

et il se trouve que sous Linux il est possible de charger à la volée des 
dizaines de milliers de telles bibliothèques partagées
Ceux qui en doutent peuvent compiler 
https://github.com/bstarynk/misc-basile/blob/master/manydl.c
qui génère un nombre arbitrairement grand de fichiers C et compile chacun en 
une telle bibliothèque (et les chargent toutes avec succès)

Pour la génération de code à la volée voir aussi 
https://gcc.gnu.org/onlinedocs/jit/ et https://www.gnu.org/software/libjit/
et https://www.gnu.org/software/lightning/ en plus de l'approche génération de 
code C ou C++ temporaire 
expliquée dans https://arxiv.org/abs/1109.0779

GCC contient depuis plusieurs années une bibliothèque très utile d'inspection 
de la pile d'appel
(en jargon informatique il s'agit de continuations limitées 
https://fr.wikipedia.org/wiki/Continuation_(informatique) )

Cette bibliothèque est https://github.com/ianlancetaylor/libbacktrace

Avec l'appel https://man7.org/linux/man-pages/man3/dladdr.3.html cette 
bibliothèque permet a minima d'imprimer la pile d'appel
(en anglais callstack) ce qui est très utile (par exemple dans un message 
d'erreur, mais j'entrevois d'autres utilisations possibles, 
sur la thématique de la reflexion et de l'introspection - cf 
https://fr.wikipedia.org/wiki/R%C3%A9flexion_(informatique 
(la machine virtuelle JAVA illustre l'utilité de celles-ci)

Il me faut toutefois compiler toutes les bibliothèques utiles avec à la fois 
l'option -O (ou -O2) et l'option -g
(et les options -fPIC -shared si besoin).


Comment le faire facilement avec l'utilitaire cmake, en prenant l'exemple de 
SFML https://www.sfml-dev.org/ et de FLTK 1.5 en https://www.fltk.org/


NB. Le logiciel RefPerSys (un moteur d'inférences en cours de dévelopement, 
voir refpersys.org) montre que c'est potentiellement utile (et le compilateur 
GCC aussi)
-- 
Basile STARYNKEVITCH                            <[email protected]>
8 rue de la Faïencerie                       http://starynkevitch.net/Basile/  
92340 Bourg-la-Reine                         https://github.com/bstarynk
France                                https://github.com/RefPerSys/RefPerSys

Répondre à