Advertisement

Linux c编译,运行遇到的问题总结

阅读量:

编译遇到的问题:

1. implicit declaration of function 两种原因:

1 没有把函数所在的c文件生成.o目标文件
2 在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明

drivers/mmc/sep_mci.c:830: warning: implicit declaration of function `clk_disable' --于是我在sep_mci.c的头部将 <linux/clk.h>包含进去就行了

2 . warning: assignment makes pointer from integer without a cast

1. 未包含函数的头文件

2. 函数在被调用之前未作声明

3. error: multiple storage classes in declaration specifiers

把全局静态变量用成了extern (extern static int device_probe())

4. inlining failed in call to always_inline 'driver_match_device': function bod

我把incline去掉后,编译成功 (extern inline int device())

5.warning: 'struct ccw_dev_id' declared inside parameter li st [enabled by default]

缺少头文件,声明

6.ERROR: "_ioctrl_bind_pt_dev"[arch/s390/kvm/kvm.ko] undefined!

在头文件里面没有声明,所以找不到该函数的定义

  1. 编译出现ISO C90 forbids mixed declarations and code 警告

因为 变量定义之前任何一条非变量定义的语句(注意:语句是会带分号的)都会引起这个警告!

将非变量的定义移到变量定义之后 即可

8 提示错误“expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘<’ token“

1.include 前忘记了加上“#”

2.某些关键字书写错误,如“void”(我糊涂地把它写成viod)

3.很常见的错误,就是makefile的命令前面用的空格而不是用[tab],正确应该是用[tab]

4.{}()不配对

9.error :expected declaration or statement at end of input

1. 某一个函数或者变量没有在使用之前声明。

2. 某个地方少了个括号。

10. _warning:declared inside parameter list _

缺少头文件 (说你这个参数只能在函数声明中有意义,其他范围可能不行)

drivers/built-in.o(.text+0x33e24): In function drm_lock_take': drivers/char/drm/drm_lock.c:208: undefined reference to cmpxchg'
drivers/built-in.o(.text+0x33ea: In function drm_lock_transfer': drivers/char/drm/drm_lock.c:248: undefined reference to cmpxchg'
drivers/built-in.o(.text+0x33eec): In function drm_lock_free': drivers/char/drm/drm_lock.c:273: undefined reference to cmpxchg'
drivers/built-in.o(.text+0x33f9c): In function drm_notifier': drivers/char/drm/drm_lock.c:310: undefined reference to cmpxchg'
make: *** [.tmp_vmlinux1] 错误 1

答案:在Device Driver里选择了Direct Rendering Manager驱动,ARM里不支持这个驱动,去掉选项就可以了

全部评论 (0)

还没有任何评论哟~