Подтвердить что ты не робот

Endian.h не найден на mac osx

Я встречаюсь с некоторыми проблемами, когда компилирую код C на моем mac, который дает мне эту ошибку:

фатальная ошибка: 'endian.h'     файл не найден

Я сделал несколько поисков по этой проблеме. Кажется, что у mac os x нет заголовочных файлов, таких как "endian.h", мы должны создать этот файл вручную.

Затем я нашел этот http://www.opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/Endian.h, который может быть файлом, который я ищу, но не уверен.

Но впереди больше неприятностей. Где я должен поместить этот файл?

Файл /usr/include не существует.

Это папки в каталоге /usr:

X11 bin libexec share X11R6 lib sbin автономный

Может ли кто-нибудь помочь мне проверить правильность файла endian.h, который я нашел, и сказать мне, где разместить этот файл в моем mac, пожалуйста?

4b9b3361

Ответ 1

Xcode на OS X не устанавливает инструменты командной строки по умолчанию. В зависимости от версии Xcode и OS X вы должны

  • установите инструменты командной строки из окна Xcode Preferences-> Downloads или
  • выполнить xcode-select --install из командной строки терминала.

Это также установит файлы "/usr/include", включая "/usr/include/machine/endian.h".

Для Xcode 10 и позже, см. Ответ Камиллы Г.

Ответ 2

Я использовал <machine/endian.h> вместо <endian.h>.

Он работает.

Как сказано в первом комментарии, endian.h находится в папке /usr/include/machine/.

Ответ 3

Загрузите и установите Инструменты командной строки (macOS 10.X) для XCode 10.X от Apple: https://developer.apple.com/download/more/

Начиная с MacOS 10.14, это больше не создаст папку /usr/include. Это требует установки дополнительного пакета, который вы можете найти на своем компьютере после установки инструментов командной строки:

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

Ответ 4

Фактически, вы должны импортировать "Endian.h" проверьте свой дисковый менеджер, возможно, ваш диск чувствителен к регистру.

Ответ 5

У меня была похожая проблема сегодня. Чтобы решить эту проблему, я сделал файл с именем endian.h в /usr/local/include/endian.h, который содержит

#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__ */

Суть

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

или просто измените заголовок, указывающий на endian.h, вместо этого на

#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