zoukankan      html  css  js  c++  java
  • Arduino上“Collect2.exe: error: ld returned 5 exit status”错误的解决方法

    1.运行环境

    Windows xp;
    Arduino1.6.11 IDE.

    2.问题

    在Arduino编译时,经常出现如下的错误:
    collect2.exe: error: ld returned 5 exit status
    exit status 1
    Error compiling for board Arduino Duemilanove or Diecimila

    打开Arduino中编译过程显示的开关,可以知道,编译文件时没有错误,只是在链接时出现了错误。自己做一个批处理,在命令行中重新运行出错的链接部分,会弹出一个窗口,是“内存不能为读”错误。之后就退出了。

    链接问题
    图1. 在命令行中重新链接时弹出的窗口

    3.问题的本质

    经过错误代码跟踪,问题不是出在Arduino上,而是在windows XP的ntdll.dll模块上,Arduino的链接程序ld.exe调用了ntdll.dll模块的功能时出了错误,在其中返回(ret)时,进入了无权限的区域,只有修复ntdll.dll才可以从根本上解决以上问题。在windows xp和windows 7上可能会出现上边的错误,而论坛中说,在windows 10上不会出现上边的问题。在国外的论坛上有大量的用低版本的Arduino的ld.exe代替的解决方法,可能是低版本的ld.exe不调用ntdll.dll,但是,有的也不好用。

    错误跟踪1
    图2. ntdll.dll模块内出现的错误

    4.折中解决方法

    经过观察,虽然链接时出现了错误,但是,在目标目录中,已经生成了elf文件,却没有hex文件,也就是链接时,在生成elf文件后出现了调用ntdll.dll的错误, 中止了下边要进行的elf生成hex文件的工作。

    经过分析正确的链接过程,使用avr-objcopy,用批处理完成elf文件到hex文件的生成。

    创建一个elf2hex.bat文件,把如下内容写到elf2hext.bat文件中。

    "D:arduino-1.6.11hardware oolsavr/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "d:Arduino_Hex/pelican.ino.elf" "d:Arduino_Hex/pelican.ino.eep"
    "D:arduino-1.6.11hardware oolsavr/bin/avr-objcopy" -O ihex -R .eeprom "d:Arduino_Hex/pelican.ino.elf" "d:Arduino_Hex/pelican.ino.hex"

    根据你的应用,替换掉pelican文件名,其中d:Arduino_Hex是Arduino编译的目标目录,是自己创建的【1】。

    5.使用

    (1).先正常使用Arduino编译,看是否生成elf文件(我的情况是总会生成的),有的时候,有collect2.exe: error: ld returned 5 exit status错误。退出了。但是elf文件已经生成。

    (2).运行elf2hex.bat文件,在目标中会出现hex文件。

    参考:
    【1】Arduino设置:http://www.cnblogs.com/hyper99/p/Arduino-UNO-fang-zhen-kai-fa-huan-jing-she-zhi-he-.html

  • 相关阅读:
    centos下如何关闭xdebug扩展
    xdebug调试的原理
    取值再拼接跳转链接
    描点返回-动画
    比较旧的写法:验证车牌、手机号、电话、qq等
    jQuery实现ie浏览器兼容placeholder效果
    CSS3的REM设置字体大小
    整理前端问题
    css3 hover效果
    ie7 a标签强制不换行兼容问题
  • 原文地址:https://www.cnblogs.com/hyper99/p/Arduino-shang-Collect2exe-error-ld-returned-5-exit.html
Copyright © 2011-2022 走看看