您的位置:首页 > 运维架构 > Linux

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

2014-07-28 19:59 573 查看
编译遇到的问题:

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!

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

7. 编译出现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


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

11.

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里不支持这个驱动,去掉选项就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: