嵌入式 编程常见错误一览表

原创 2013年12月02日 14:52:53

1.提领指向不完全类型的指针

structhostent

{

      char   *h_name;               

      char   **h_aliases;

      int    h_addrtype;

      int    h_length;

      char   **h_addr_list;

      #defineh_addr h_addr_list[0]

};

没有包含头文件,哈哈

   比如这个结构,尽管在头文件中已经包含或定义,但对这个结构体的成员(hptr->h_name)变量进行访问时,编译无法通过,显示编译器错误提示为“提领指向不完全类型的指针”。

对于结构体来说虽然所有的变量默认都是公有的,但是,如果想访问里面的成员变量,必须有包含对其结构的定义,否则出现如上的错误,c编译器将无法识别结构里面的变量,一般想操作结构体里的成员变量,都是通过调用结构体中定义的函数接口,来取得结构体中的值,如果想直接访问,在头文件或源文件中加入结构体的定义就行了


2.警告赋值makes pointer from integer without acast

  同样因为没包含头文件。


3.previous implicitdeclaration of 'Base64_Code'was here

   Base64_Code函数未定义如果要使用Base64_Code函数则要先定义。


4.警告use of cast expressionsaslvalues is deprecated

   (short)buf[2]=atoi(&data[4]);不赞成把强制类型转换的结果作为左值


5.warning: initializationdiscards qualifiers frompointer target type

   initialization取消了指针目标类型的限定。


6.glibc detected *** free():invalid next size(normal)

   是内存泄露的问题。

   (1)一般是free了没有分配的内存

   (2)还有就是分配了内存忘记释放也有可能会出现这样的问题。

   (3)最后查出来是数组循环的时候越界了 ,写到了其他的内存里面, 然后一free那个区域就出现了这样的问题。

   是有allocate引起的,一个debug的方法是把你怀疑的矩阵(比如释放了就会报内存错误)定义成静态的,这样如果出现越界,会报段错误。依次检查是否你的数组真的越界了。


7. undefined referenceto`__gxx_personality_v0'

   gcc main.c animal.o后,出现这个错误(c与c++混合编程中),解决:gcc main.canimal.o -lstdc++  错误原因:是因为你用gcc编译.cpp文件.按系统默认.cpp文件是c++的文件格式


8.rmmod:gpio_i2c_LVP1008.ko: Resource temporarilyunavailable

   [root: 1st]#lsmod//查看一下当前加载的模块

   driver 1256 0- Live0xbf00c000

   device 1560 0- Live0xbf006000

   bus 1336 2driver,device, Live0xbf000000 //模块的引用计数,bus模块被device和driver引用

   [root: 1st]#rmmodbus//如果你要卸载bus模块,它会提示出错,要先卸载driver和device

   rmmod: remove'bus': Resourcetemporarily unavailable

   [root: 1st]#rmmoddriver

   usb driverbye!

   [root: 1st]#rmmod device//卸载device时,内核自动调用device结构体中指定的release函数

   release

   usb device bye!

   [root: 1st]#lsmod//bus的引用计数为0,可以卸载bus了

   bus 1336 0 -Live0xbf012000

   [root: 1st]#rmmodbus

   usb bus bye!


9. error: expectedidentifier before numericconstant错误。

    原因:定义的enum结构体与其它处的宏定义有冲突。


10.warning: missing bracesaroundinitializer

   原因:结构体初始化失败。


11.too many agrument

   一种原因:参数多于10个。


12. /usr/bin/ld: cannotfind-lxxx

   原因:找不到对应库文件。其中,-lxxx表示链接库文件 libxxx.so。

   一般出现这种错误有以下几种原因:

      1.系统缺乏对应的库文件;

      2.版本不对应;

      3.库文件的链接错误;

      4.库文件路径设置问题。

    对应第一第二种情况,可以通过下载安装lib来解决,ubuntu大多数可以直接通过apt-get来安装:

      apt-get install libxxx-dev

     一般遇到这种问题笔者第一时间也是会去检查系统是否已安装该lib或者是否已选择正确版本(只是习惯问题),如果还是不能解决问题,那么,引起错误的原因不是链接错误就是库文件路径问题了。

       通过find或者locate指令定位到链接文件,查看链接文件是否正确的指向了我们希望的lib,如果不是,用ln-sf */libxxx.so.x */libxxx.so 指令修改它。

       如果是库文件路径引发的问题,可以到/etc/ld.so.conf.d目录下,修改其中任意一份conf文件,(可以自建conf,以方便识别)将lib所在目录写进去,然后在终端输入ldconfig更新缓存。

      

13.在控制台提示:Semop lockfailureIdentifier removed

   Semop unlockfailure Identifier removed

  解决办法:运行应用程序,比如:client-qws&去掉-qws 因为只有Server 才需要-qws&。&为后台运行的标识。


14.Segmentation fault

   数组越界或访问空、野指针或未被初始化的指针都会出现这个问题。


15.安装VMware: TheMSI'C:\Users\dell\AppData\Local\Temp\vmware_1344246656\vmwarevmcisockets64.msi'failed

   清空注册表中vmware信息(或者下载一个VM卸载工具):

     1、开始->运行,输入:regedit;

      2、在注册表中,找到:HKEY_LOCAL_MACHINE\SOFTWARE\VMware并删除。

   VMware Workstation unrecoverableerror:(vmx)错误

      解决:删除或修改虚拟机目录下拓展名为.vmss(33.3M)文件,再次启动即可。一般为centos5.6-d4cf3290.vmss文件。


16.arm板运行时出现Can't retrieve login name  

   原因:RTP的JRTPLIB库中的RTPSession中的Create->InternalCreate->CreateCNAME中,有对用户名进行一定操作,其中的getlogin_r(),getlogin()和getenv()操作都会因为用户名为空,而返回错误ERR_RTP_SESSION_CANTGETLOGINNAME。
   解决的方式有3种:1)export   LOGNAME=root 2)大部分开发板还是需要用户名登陆的,即在文件系统完全启动后再运行,也能解决。3)因为板子上的文件系统有时不需要用户名就可以直接登录,而在我们可以通过修改JRTPLIB库的CreateCNAME源代码来为系统默认设置一个用户名。在RTPSession.cpp的第1400行。


17. warning: control reaches end of non-voidfunction
   解决:函数结尾无return返回值导致的,在函数最后加一句return 0。
18.could not read symbols: 文件格式错误

19.insmod: can't insert'xxx.ko': unknown symbol in module, or unknownparameter
  解决办法:通过信息中的绿色背景信息,可以找到解决办法:在内核模块源码文件中添加MODULE_LICENSE("GPL");

20.MMB LEAK(pid=2876):0xC68B9000, 32768 bytes, '' mmz_userdev_release:mmb<0xC68B9000> mapped to userspace 0x40f50000 will be forceunmaped!
   解决:客服端跟服务器端进行socket通信时,服务器异常断开,而客户端并不知道服务器已经断开,继续向服务器发送数据,从而引发了SIGPIPE信号,内核响应这个信号,强行终止了程序;
signal(SIGPIPE, SIG_IGN);

21.mount:192.168.1.211:/work/nfs failed, reason given by server: Permissiondenied
1)修改 /etc/exports
  /work/nfs  192.168.1*(rw,insecure,sync)   //网段不对
2)然后重启服务
service nfs restart

22.开发板能ping通路由器,但ping不通外网
  vi /etc/resolv.conf
    nameservice 192.168.2.1
   因为1,2网段不断切换,但域名服务器未改变。

23. [16/Jul/2013:19:56:22+0000] requestfrom 192.168.1.114 "GET /favicon.ico HTTP/1.1"("/www/favicon.ico"):document open: No such file or directory
   在/www的目录下创建favicon.ico文件:touch favicon.ico

相关文章推荐

8--2支持阻塞操作的globalfifo设备驱动

在用户空间验证 globalfifo的读写: 编译 globalfifo.c并insmod模块即创建设备文件节点'/dev/globalfifo'后,启动两个进程,一个进程"cat /dev/glob...

总线、设备和驱动的关系

linux设备驱动归纳总结(八):2.总线、设备和驱动的关系 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...

SIGPIPE信号引起程序退出

项目中使用的是海思HI35XX,设备端音频视频服务程序跑起来后一段时间,提示MMB LEAK(pid=xxx)后,主应用程序就退出了,开使以为是设备的内存不足引起的,调试时把一些服务线程关闭了,发现依...
  • zqj6893
  • zqj6893
  • 2015年11月23日 15:18
  • 1585

这些年我记下的一些编程错误

编程不经历错误或警告,怎能见彩虹,没有人能随随便便成为高手。身为程序员的我们,如果哪一天没有了错误或警告的提示,一定会有一种不祥的预感,对吧,都懂的。编程N年来,碰到过的问题多得自己都记不清了,你也一...

嵌入式设计常见错误与点评(经验之谈)

成本节约 现象一:这些拉高/拉低的电阻用多大的阻值关系不大,就选个整数5K吧? 点评:市场上不存在5K的阻值,最接近的是4.99K(精度1%),其次是5.1K(精度5%),其成本分别比精度...

C语言常见错误一览表

  • 2013年12月16日 19:25
  • 114KB
  • 下载

SVN 常见错误 信息 一览表

Subversion 错误信息一览表 注意: 1.不同的客户端(命令行,TortoiseSVN, AnkhSVN, Subclipse等)的出错信息可能稍有不同。 2.下面表格中的...

嵌入式死机常见解释

  • 2014年07月22日 22:28
  • 1KB
  • 下载

嵌入式学习中遇到的错误及其解决办法

嵌入式学习中遇到的错误及其解决办法                 (redhat版) 一:启动redhat时出现下面情况的解决办法、 (转载网上,但可行性高)      gn...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 编程常见错误一览表
举报原因:
原因补充:

(最多只允许输入30个字)