致命错误:未找到'endian.h'文件。

10
尝试编译C程序时,每次运行makegmake(建议使用)都会出现以下错误。
$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C src all
gcc -g -W -Wall -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0  -Iinclude   -c -o osdep/radiotap/radiotap.o osdep/radiotap/radiotap.c
In file included from osdep/radiotap/radiotap.c:17:
osdep/radiotap/platform.h:6:10: fatal error: 'endian.h' file not found
#include <endian.h>
         ^
1 error generated.
make[1]: *** [osdep/radiotap/radiotap.o] Error 1
make: *** [all] Error 2


$ gmake
gmake -C src all
gmake[1]: Entering directory '/Users/silent/Desktop/aircr-1.2-rc1/src'
gcc -g -W -Wall -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0  -Iinclude   -c -o osdep/radiotap/radiotap.o osdep/radiotap/radiotap.c
In file included from osdep/radiotap/radiotap.c:17:
osdep/radiotap/platform.h:6:10: fatal error: 'endian.h' file not found
#include <endian.h>
         ^
1 error generated.
<builtin>: recipe for target 'osdep/radiotap/radiotap.o' failed
gmake[1]: *** [osdep/radiotap/radiotap.o] Error 1
gmake[1]: Leaving directory '/Users/silent/Desktop/aircr-1.2-rc1/src'
Makefile:25: recipe for target 'all' failed
gmake: *** [all] Error 2

根据一些在线表格的建议,在此位置检查文件 ~/usr/include/machine,但没有说明是否发现或未发现该文件应该怎么办!其他都没有帮助。然后,我找到了这个http://www.opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/Endian.h

silent:~/usr/include/machine
$ ls
_limits.h      _types.h       fasttrap_isa.h profile.h      vmparam.h
_mcontext.h    byte_order.h   limits.h       signal.h
_param.h       `endian.h`       param.h        types.h

我得到的错误提示是文件已经存在!希望能够得到帮助,谢谢。

PS:我是新手,不知道上面的链接在说什么。 :(


2
你尝试将endian.h复制粘贴到/usr/include目录下了吗? 这个答案在这里:https://dev59.com/V2Ii5IYBdhLWcg3w7wDP - amrx
这是我到那个链接的地方,但我还没有尝试过,现在会去尝试并看看会发生什么。 - user93097373
@user3097840,我因为缺少链接而得到更多的错误,所以我把它放回去了,重新启动后错误就解决了。现在出现了“Undefined symbols for architecture x86_64:” 的错误。 - user93097373
将这里的定义添加进去(http://debugjournal.tumblr.com/post/99661010362/missing-byteswap-h-and-endian-h-on-mac-os-x),并在CFLAGS中添加-D_DARWIN_SOURCE,问题就解决了。 - Moshe
2个回答

11

在OSX和iOS上,您可以以以下方式包含endian.h:

#include <machine/endian.h>

请注意,这将在Android或Linux上失败,因为它们期望#include <endian.h>

您还可以包含sys/types.h,这将在iOS/OSX和Android/Linux上都正确地包含endian.h:

#include <sys/types.h>

2
您需要告诉C编译器可以在哪里找到这个文件: export CFLAGS="$CFLAGS -I~/usr/include/machine" 然后运行make
或者您可以编辑Makefile文件,在需要的地方添加-I~/usr/include/machine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接