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

本文总结了在Linux环境下进行C编程时可能会遇到的编译和运行问题,包括隐式函数声明、指针转换警告、存储类别错误、内联函数失败、缺失头文件声明、找不到函数定义等,并提供了相应的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译遇到的问题:

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里不支持这个驱动,去掉选项就可以了
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值