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, пожалуйста?
Ответы
Ответ 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