我正在尝试安装 esp-open-sdk 并独立编译它以编译 Web 服务器固件。因此,遵循(官方?)来自
wiki/doku.php?id=toolchain 的文档
代码:
全选git clone --recursive
https://github.com/pfalcon/esp-open-sdk
cd esp-open-sdk
make STANDALONE=y
添加到路径等。
然后,我下载 Web 服务器代码并尝试立即编译它:
代码:
全选git clone "https://github.com/dubaurazvan/esp8266-wireless-switcher.git"
cd esp8266-wireless-switcher
make
然后我得到无数错误,都与此类似:
代码:
全选CC user/stdout.c
In file included from include/espmissingincludes.h:4:0,
from user/stdout.c:13:
/home/amadeus/esp-open-sdk/xtensa-lx106-elf/xtensa-lx106-elf/sysroot/usr/include/ets_sys.h:14:1: error: unknown type name 'uint32_t'
typedef uint32_t ETSSignal;
所以我查看了 ets_sys.h 文件,前几行是
代码:
全选/*
* copyright (c) 2008 - 2011 Espressif System
*
* Define user specified Event signals and Task priori
ties here
*
*/
#ifndef _ETS_SYS_H
#define _ETS_SYS_H
#include "c_types.h"
#include "eagle_soc.h"
typedef uint32_t ETSSignal;
typedef uint32_t ETSParam;
它使用 uint32_t,我猜它应该在同一目录的 c_types.h 中定义。然后我看看 c_types.h 和
代码:
全选/*
* Copyright (c) 2010 - 2011 Espressif System
*
*/
#ifndef _C_TYPES_H_
#define _C_TYPES_H_
#include
#include
#if 0
typedef unsigned char uint8_t;
typedef signed char sint8_t;
typedef signed char int8_t;
typedef unsigned short uint16_t;
typedef signed short sint16_t;
typedef signed short int16_t;
typedef unsigned long uint32_t;
typedef signed long sint32_t;
typedef signed long int32_t;
typedef signed long long sint64_t;
typedef unsigned long long uint64_t;
typedef unsigned long long u_int64_t;
typedef float real32_t;
typedef double real64_t;
#endif
等等,果然,uint32_t 没有定义,因为#if 0 指令。在 esp-open-sdk(sdk 的根目录)中,我有一个 c_types-c99.patch 正是这样做的,它用 #if 0 / #endif 包围了 c_types.h 中的 typedef。
那么这是怎么回事呢?我也许可以在没有 c_types-c99 补丁的情况下以某种方式重新编译 sdk,但我敢打赌这会破坏其他东西。有任何想法吗?
我在 64 位 Fedora 22 机器上执行此操作。