在mac osx上找不到endian.h

在mac osx上找不到endian.h,c,macos,header-files,C,Macos,Header Files,我在mac电脑上编译一些C代码时遇到了一些问题,导致了以下错误: 致命错误:“endian.h” 找不到文件 我在谷歌上搜索过这个问题。似乎MacOSX没有像endian.h这样的头文件,我们必须手动创建这个文件 然后,我发现这可能是我正在寻找的文件,但不确定 但是更多的麻烦来了。。我应该把这个文件放在哪里 文件/usr/include不存在 以下是my/usr目录中的文件夹: X11 bin libexec共享 X11R6库sbin独立 有谁能帮我检查一下我找到的endian.h文件的正确性,

我在mac电脑上编译一些C代码时遇到了一些问题,导致了以下错误:

致命错误:“endian.h” 找不到文件

我在谷歌上搜索过这个问题。似乎MacOSX没有像endian.h这样的头文件,我们必须手动创建这个文件

然后,我发现这可能是我正在寻找的文件,但不确定

但是更多的麻烦来了。。我应该把这个文件放在哪里

文件/usr/include不存在

以下是my/usr目录中的文件夹:

X11 bin libexec共享 X11R6库sbin独立


有谁能帮我检查一下我找到的endian.h文件的正确性,并告诉我把这个文件放在我的mac中的什么地方吗?

OSX上的Xcode默认不安装命令行工具。取决于你的 Xcode和OSX版本您必须

从Xcode首选项->下载窗口安装命令行工具,或 从终端命令行执行xcode select-install。 这还将安装/usr/include文件,包括/usr/include/machine/endian.h


对于Xcode 10及更高版本,请参见。

事实上,您应该导入Endian.h 检查您的磁盘管理器,可能您的磁盘区分大小写

我只是用过而不是用过

它起作用了

如第一条评论所述,endian.h位于/usr/include/machine/folder中。

从Apple下载并安装命令行工具macOS 10.X for XCode 10.X:

由于MacOS 10.14,这将不再创建/usr/include文件夹。 这需要安装一个额外的软件包,您可以在安装命令行工具后在计算机上找到该软件包:


/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg今天我遇到了类似的问题。为了解决这个问题,我在/usr/local/include/endian.h创建了一个名为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__ */

是的,它起作用了。我在include/machine中找到了endian.h文件,但仍然无法正确编译代码,同样的错误。我应该将endian.h复制并粘贴到/usr/include吗?@geasssos:不,只有在其他方法都不起作用的情况下,这才是最后的选择。-您的项目是否有配置脚本?也许这不能正确处理OSX平台另外请注意,sys/types.h已经包含machine/endian.h,所以您可能不必显式地包含它。我应该使用include而不是include吗?@geasssos:我应该包含sys/types.h,但是为什么不试试呢?不,sys/tyeps.h不起作用,但是当我尝试包含其他错误时,却没有关于endian.h的内容,看来这部分错误已经解决了。我犯了一个错误,用区分大小写的思想重新格式化了我的磁盘,这在几年前是一个好主意,它仍然像这样悄悄地进入并破坏东西。这就是为什么您正确地将文件路径大写,因为这对我在OSX 10.14.1上没有帮助;我仍然有找不到endian.h的错误。我最终安装了我试图构建numpy的软件的更高版本,但没有出现此错误。这创建了/usr/include文件夹,对我来说非常有效。请注意,在OS X 10.14上,安装macOS_SDK_headers_for_macOS_10.14.pkg可能会失败。在这种情况下,当apple徽标出现时,您必须进入恢复模式restart,按住Cmd+R,输入Terminal,键入csrutil disable,重新启动,安装软件包,然后再次在恢复模式下启用csrutil。如果您无法在/usr/include中进行更改,即使使用sudo也同样适用。这会有所帮助,但它仍然不包含Linux手册页中所说的htole32:我知道这是Linux与Mac OS X之间的较量。只是为那些可能在Google上登陆的人添加了一些内容,看看如何在Mac上快速获取htole32。
#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