web-dev-qa-db-fra.com

endian.h introuvable sur mac osx

Je rencontre des problèmes lorsque je compile du code C sur mon mac qui me donne cette erreur:

Erreur fatale: fichier 'endian.h' introuvable

J'ai fait une recherche Google sur ce problème.Il semble que mac os x ne possède pas de fichiers d'en-tête comme "endian.h", nous devons créer ce fichier manuellement.

Ensuite, j'ai trouvé ceci http://www.opensource.Apple.com/source/CarbonHeaders/CarbonHeaders-18.1/Endian.h qui pourrait être le fichier que je recherche mais pas sûr.

Mais plus de problèmes arrivent .. où dois-je mettre ce fichier?

Le fichier/usr/include n'existe pas.

Ce sont les dossiers dans mon répertoire/usr:

X11 bin libexec share X11R6 lib sbin standalone

Quelqu'un pourrait-il m'aider à vérifier l'exactitude du fichier endian.h que j'ai trouvé et me dire où placer ce fichier dans mon mac s'il vous plaît?

21
geasssos

Xcode sur OS X n'installe pas les outils de ligne de commande par défaut. En fonction de votre version Xcode et OS X, vous devez

  • installez les outils de ligne de commande à partir de la fenêtre Préférences Xcode-> Téléchargements, ou
  • exécuter xcode-select --install depuis la ligne de commande du terminal.

Cela installera également les fichiers "/ usr/include", y compris "/usr/include/machine/endian.h".

Pour Xcode 10 et versions ultérieures, voir réponse de Camille G. .

18
Martin R

Je viens d'utiliser <machine/endian.h> plutôt que <endian.h>.

Ça marche.

Comme indiqué dans le premier commentaire, endian.h est dans /usr/include/machine/ dossier.

10
Husen

Téléchargez et installez les outils de ligne de commande (macOS 10.X) pour XCode 10.X à partir de Apple: - https://developer.Apple.com/download/more/

Depuis MacOS 10.14, cela ne créera plus le dossier /usr/include Cela nécessite l'installation d'un paquet supplémentaire que vous pourriez trouver sur votre ordinateur après avoir installé les outils de ligne de commande:

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

8
Camille G.

En fait, vous devez importer "Endian.h", vérifiez votre gestionnaire de disque, peut-être que votre disque est sensible à la casse

2
alex yuan

J'ai eu un problème similaire aujourd'hui. Pour résoudre le problème, j'ai créé un fichier nommé endian.h à /usr/local/include/endian.h cela contient

#ifndef __FINK_ENDIANDEV_PKG_ENDIAN_H__
#define __FINK_ENDIANDEV_PKG_ENDIAN_H__ 1

/** compatibility header for endian.h
 * This is a simple compatibility shim to convert
 * BSD/Linux endian macros to the Mac OS X equivalents.
 * It is public domain.
 * */

#ifndef __Apple__
    #warning "This header file (endian.h) is MacOS X specific.\n"
#endif  /* __Apple__ */


#include <libkern/OSByteOrder.h>

#define htobe16(x) OSSwapHostToBigInt16(x)
#define htole16(x) OSSwapHostToLittleInt16(x)
#define be16toh(x) OSSwapBigToHostInt16(x)
#define le16toh(x) OSSwapLittleToHostInt16(x)

#define htobe32(x) OSSwapHostToBigInt32(x)
#define htole32(x) OSSwapHostToLittleInt32(x)
#define be32toh(x) OSSwapBigToHostInt32(x)
#define le32toh(x) OSSwapLittleToHostInt32(x)

#define htobe64(x) OSSwapHostToBigInt64(x)
#define htole64(x) OSSwapHostToLittleInt64(x)
#define be64toh(x) OSSwapBigToHostInt64(x)
#define le64toh(x) OSSwapLittleToHostInt64(x)


#endif  /* __FINK_ENDIANDEV_PKG_ENDIAN_H__ */

Gist est

https://Gist.github.com/dendisuhubdy/19482135d26da86cdcf442b3724e0728

ou changez simplement l'en-tête pointant sur endian.h au lieu de

#if defined(OS_MACOSX)
  #include <machine/endian.h>
#Elif defined(OS_SOLARIS)
  #include <sys/isa_defs.h>
  #ifdef _LITTLE_ENDIAN
    #define LITTLE_ENDIAN
  #else
    #define BIG_ENDIAN
  #endif
#Elif defined(OS_FREEBSD) || defined(OS_OPENBSD) || defined(OS_NETBSD) ||\
      defined(OS_DRAGONFLYBSD)
  #include <sys/types.h>
  #include <sys/endian.h>
#else
  #include <endian.h>
#endif
2
Dendi Suhubdy