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