Prenons le cas où j'utilise une fonctionnalité des en-têtes Linux exportée vers l'espace utilisateur, telle que perf_event_open
de <linux/perf_event.h>
.
La fonctionnalité offerte par cette API a évolué au fil du temps, au fur et à mesure que des membres ont été ajoutés à la base de données des perf_event_attr
, tels que perf_event_attr.cap_user_time
.
Comment puis-je écrire un code source qui compile et utilise ces nouvelles fonctionnalités si elles sont disponibles localement, mais qui se replie gracieusement si elles ne le sont pas et ne les utilise pas ?
En particulier, comment puis-je détecter dans le pré-processeur si ces éléments sont disponibles ?
J'ai utilisé cette perf_event_attr
à titre d'exemple, mais ma question est d'ordre général, car des membres de structures, de nouvelles structures, des définitions et des fonctions sont ajoutés en permanence.
Notez que je ne considère ici que le cas où un processus est compilé sur le même système que celui sur lequel il s'exécutera : si vous voulez compiler sur un hôte et exécuter sur un autre, vous avez besoin d'un ensemble différent d'astuces.