【问题标题】:fatal error: 'endian.h' file not found致命错误:找不到“endian.h”文件
【发布时间】:2015-01-20 08:02:57
【问题描述】:

尝试编译 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:我是新手,不知道上面这个链接是什么意思:(!

【问题讨论】:

  • 您是否尝试将 endian.h 复制并粘贴到 /usr/include 中?这个答案在这里stackoverflow.com/questions/20813028/…
  • 这是我访问该链接的地方,但我还没有尝试过,现在就去做,看看会发生什么。
  • @user3097840,我因为缺少链接而出现更多错误,所以我把它放回去了,错误通过重新启动解决。现在它得到Undefined symbols for architecture x86_64:
  • 添加定义 here 并将 -D_DARWIN_SOURCE 添加到 CFLAGS 为我解决了这个问题。

标签: c xcode macos


【解决方案1】:

在 OSX 和 iOS 上,您可以通过这种方式包含 endian.h:

#include <machine/endian.h>

但请注意,这将在 Android 或 Linux 上失败,因为他们期望 #include &lt;endian.h&gt;

您还可以包含 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 部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-02
      • 2014-12-21
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      • 1970-01-01
      • 2021-01-19
      相关资源
      最近更新 更多