在GCC linux中编译时的一堆错误和警告
bunch of errors and warnings while compiling in gcc linux
这段代码是几个月前编译时没有错误的。我丢失了虚拟机映像,所以我用最新的GCC和库设置了一个新的linux虚拟机。但是现在我得到了这些错误和警告。
In file included from /opt/Espressif/ESP8266_SDK/include/ets_sys.h:12:0,
from include/espmissingincludes.h:4,
from driver/i2c.c:20:
driver/i2c.c: In function 'i2c_init':
/opt/Espressif/ESP8266_SDK/include/eagle_soc.h:247:94: error: suggest parentheses around arithmetic in operand of '|' [-Werror=parentheses]
#define PIN_FUNC_SELECT(PIN_NAME, FUNC) do {WRITE_PERI_REG(PIN_NAME,READ_PERI_REG(PIN_NAME) & (~(PERIPHS_IO_MUX_FUNC<<PERIPHS_IO_MUX_FUNC_S)) |( (((FUNC&BIT2)<<2)|(FUNC&0x3))<<PERIPHS_IO_MUX_FUNC_S) );} while (0)
^
/opt/Espressif/ESP8266_SDK/include/eagle_soc.h:50:87: note: in definition of macro 'WRITE_PERI_REG'
#define WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)ETS_UNCACHED_ADDR(addr))) =(val)
^
driver/i2c.c:64:5: note: in expansion of macro 'PIN_FUNC_SELECT'
PIN_FUNC_SELECT(I2C_SDA_MUX, I2C_SDA_FUNC);
^
/opt/Espressif/ESP8266_SDK/include/eagle_soc.h:247:94: error: suggest parentheses around arithmetic in operand of '|' [-Werror=parentheses]
#define PIN_FUNC_SELECT(PIN_NAME, FUNC) do {WRITE_PERI_REG(PIN_NAME,READ_PERI_REG(PIN_NAME) & (~(PERIPHS_IO_MUX_FUNC<<PERIPHS_IO_MUX_FUNC_S)) |( (((FUNC&BIT2)<<2)|(FUNC&0x3))<<PERIPHS_IO_MUX_FUNC_S) );} while (0)
^
/opt/Espressif/ESP8266_SDK/include/eagle_soc.h:50:87: note: in definition of macro 'WRITE_PERI_REG'
#define WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)ETS_UNCACHED_ADDR(addr))) =(val)
^
driver/i2c.c:65:5: note: in expansion of macro 'PIN_FUNC_SELECT'
PIN_FUNC_SELECT(I2C_SCK_MUX, I2C_SCK_FUNC);
^
cc1: all warnings being treated as errors
make: *** [build/driver/i2c.o] Error 1
有人知道如何解决这些吗?
您将警告视为错误,可能是通过使用-Werror
进行构建。如果删除该标志或添加-Wno-error=parentheses
,代码应该可以编译。
然而,如果代码是你的(而不是在第三方库中,因为它看起来是),那么修复潜在的原因是值得的。您可以在宏中通过在适当的地方添加括号来修复它,但我认为让这些宏成为真正的函数会更好。
相关文章:
- 如何使用结构和指针推动和弹出一堆双打
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 我的排序算法程序中的堆错误
- 当我在结构中包含多个数组时,我的程序会跳过一堆代码
- 在共享指针的值中调用 std::swap 调用一堆构造函数和析构函数
- 使用带有.lib和一堆.dll和.h文件的Python CFFI
- 用 c++ 编写一堆类似的 if 语句的漂亮方法
- 当我尝试编译程序时,我遇到了一堆错误,例如:'std::max':找不到匹配的重载函数
- Swig C++ to python:编译一堆.cpp和.h文件
- template元编程:将一堆模板参数相乘
- 将字符串转换为char *.堆错误
- 使用FindContours OpenCV时堆错误
- 在.NET中存储一堆恒定值的最佳方法
- 我的一堆函数出现"undefined reference"错误,我不知道为什么
- 制作一堆 int 数组
- 内置和静态链接的升压模块会导致 shutdown_service() 出现一堆链接器错误
- 链接堆栈模板和一堆错误
- Cocos2dx for Windows Phone: VS2012引发一堆错误
- 在GCC linux中编译时的一堆错误和警告
- 尝试制作一堆字符串.出现缺少类型说明符错误