Ma bibliothèque doit lire les entiers big-endian (4-bytes) et les convertir en ordre endian de l'hôte pour le traitement. Alors que sur * nix ntohl
a travaillé un régal sous Windows utilisation de ntohl
nécessite l'utilisation de Ws2_32.dll
(Winsock).Détection de l'endianness avec CMake
Une telle dépendance est celle que je préférerais éliminer. La façon la plus simple de le faire semble être d'écrire ma propre fonction d'échange endian (un exercice trivial, considérant que la performance n'est pas une réelle préoccupation). Cependant, cela nécessite un moyen de déterminer l'endianness du système sur lequel ma bibliothèque est compilée (donc je peux #ifdef
sortir la fonction de permutation sur les systèmes big endian). Comme il ne semble pas y avoir de définition de préprocesseur standard pour endianess, il semble qu'il soit nécessaire de le déterminer en utilisant mon système de compilation (cmake). Quel est le meilleur moyen de le faire? (Je suis fatigué de 'compiler un fichier de test et de voir' les solutions de type car elles sembleraient empêcher la compilation croisée.)
Remarque: CMake a effectivement un soutien raisonnable pour la compilation croisée. Pour les contrôles nécessitant l'exécution d'un programme de test, il crée le programme de test et attend que vous définissiez les variables de cache sur le résultat correct. Voir http://www.paraview.org/Wiki/CMake_Cross_Compiling. Avoir un upvote pour s'occuper de la compilation croisée. –