#1
kcx.c:112:89: error: format specifies type 'unsigned int' but the argument has type 'u32 *' (aka 'unsigned int *') [-Werror,-Wformat]
报错原因:
int kcx(u32 *trigger)
{
ERR_MSG("%s:failed. attr=%d, trigger=%u\n", __func__, attr_enable, trigger);
传入的参数为 u32 * 类型,执行打印时格式不对。
#2
ERROR! Defconfig fragment did not apply as expected
报错原因:+# CONFIG_MEM_OFFLINE_FAIL is not set
正确的形式: #CONFIG_MEM_ONLINE_FAIL=y
#3
drivers/scsi/mmc/Kconfig:217:warning: no new line at end of file
C语言显示“warning: no newline at end of file ”具体原因,是因为在文件尾必须的新增一行空行,以避免include文件时,展开后与后面的文件连为一行,造成错误。
解决方法:
在*.c文件最后面添加上一个回车,独立成一行。(在程序代码的最后面多敲一个空行,也就是说在右括号后打个回车键。因为gcc对源文件有要求,就是.c or .cpp文件后面要有一个空行)。
#4
ERROR: do not initialise globals to NULL
在scsi.h 中定义:
bool disable_lpm;
在scsi.c 中:
disable_lpm = true;
#5
device.mk:108: error: commands commence before first target.
可能的原因: “Makefile可能是以命令行开始:以[Tab]字符开始,但不是一个合法的命令行(例如,一个变量的赋值)。命令行必须和规则一一对应。”
多行书写中,反斜线之后不能有空格(这种错误比较隐蔽)。
通过.PHONY特殊目标将”clean”目标声明为伪目标。避免当磁盘上存在一个名为”clean”文件时,目标clean所在的规则的命令无法执行。
只需在makefile中增加.PHONY clean,即可正常运行clean目标。
在命令行之前使用”-”,意思是忽略命令的执行错误。
包含其他的makefile:
include 指示符告诉make暂停读取当前的makefile,而转去读取include指定的一个或多个文件,完成以后在继续当前makefile的读取。
./test/config配置文件。
#6
drivers/scsi/Kconfig:216:warning: ignoring unsupported character '.'
经过搜索发现:
此处出现的符号,有可能是中文,或者是Kconfig文件中不支持的符号类型。找到该符号,然后重新修改为英文;或者,找到该符号,然后删除。
编译报错英文描述
WARNING: Prefer 'unsigned int' to bare use of 'unsigned'
ERROR: space required before the open parenthesis '('
ERROR: switch and case should be at the same indent
ERROR: open brace '{' following function definitions go on the next line
WARNING: Possible unnecessary 'out of memory' message
#7
error: expected '=', ',', ';
原先的: /* #define ERR_INJECTION */
#ifdef ERR_INJECTION 在修改时候,没有注意, 直接把# 也一起去掉了。
写成了 define ERR_INJECTION, 导致编译报错
#8
函数返回值类型错误
error: static declaration of 'scsi_exec_req' follows non-static declaration : 调用的静态函数没有先声明一下,就是它定义在你调用之后。
原因分析:调用的静态函数在调用之后声明的。
解决方法:把静态函数声明放在调用前面。
一般情况下,把函数声明放在 .h头文件,把代码实现放在 .c文件,这就不多说了。要看具体使用场景。另外如果你定义的函数,不想给外部文件使用,可以在函数前面加上static。
#9
Char 20: error: cannot initialize a variable of type 'ListNode *' with an rvalue of type 'int'
14 | ListNode * mody(-1), *cur = mody;
原因:
-
果你不需要这个对象的地址,而只是想要复制它,你可以修改初始化语句为:
ListNode* node = new ListNode(someFunction());
这将创建一个新的ListNode
实例,并用someFunction()
返回的临时对象来初始化它。记得在不需要这个新创建的实例时,要手动释放内存,防止内存泄露。
#10
ERROR! Defconfig fragment did not apply as expected
在config文件中,需要补全信息,最后需要多空出一行,否则会出现编译报错。
欢迎关注我的小站: