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,但是,有的也不好用。

图2. ntdll.dll模块内出现的错误
4.折中解决方法
经过观察,虽然链接时出现了错误,但是,在目标目录中,已经生成了elf文件,却没有hex文件,也就是链接时,在生成elf文件后出现了调用ntdll.dll的错误, 中止了下边要进行的elf生成hex文件的工作。
经过分析正确的链接过程,使用avr-objcopy,用批处理完成elf文件到hex文件的生成。
创建一个elf2hex.bat文件,把如下内容写到elf2hext.bat文件中。
"D:\arduino-1.6.11\hardware\tools\avr/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.11\hardware\tools\avr/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
Arduino上“Collect2.exe: error: ld returned 5 exit status”错误的解决方法的更多相关文章
- DevC++出现[Error] ld returned 1 exit status,如何解决才好呢?
回答: 代码在vc中没问题,虽然没用过DevC++. 可以把 ld returned 1 exit status前面的详细出错说出来程序是没有问题的,可能的问题最有可能是以下2个1.是你的程序已经在运 ...
- 中标麒麟QT5编译出现:cannot find -lGL 和 collect2:error:ld returned 1 exit status 错误
sudo yum install mesa-libGL-devel mesa-libGLU-devel
- error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status
Windows服务器Azure云编译安装MariaDB教程 www.111cn.net 编辑:future 来源:转载 安装MariaDB数据库最多用于linux系统中了,下文给各位介绍在Window ...
- moc_XXXX.o:(.data.rel.ro._ZTI12CalculatorUI[_ZTI12CalculatorUI]+0x10): undefined reference to `typeinfo for QWidget' collect2: error: ld returned 1 exit status make: *** [Makefile:144: myCalculator]
main.cpp:(.text.startup+0x22): undefined reference to `QApplication::QApplication(int&, char**, ...
- Dev C++编写C/C++程序 出现[Error] ld returned 1 exit status报错分析及解决
debug系列第一弹,不知道大家写程序的时候是不是都遇到过如题的报错. 我本人是经常遇到这行熟悉的令人不知所措的报错,可能是我太笨了 有时候百度无果也差不到原因,那就汇总一下目前我遇到的情况吧--持续 ...
- error: ld returned 1 exit status 和 error:undefined reference
undefined reference 往往是链接时出现错误,无法解析引用.这篇文章总结的很好undefined reference问题总结 error: ld returned 1 exit sta ...
- 【DEV C++】 Error: ld returned 1 exit status
一般出现“ld returned 1 exit status”错误都是由于函数名称拼写错误造成的,或者在一个工程中不同的函数使用了同一个函数名,暂时还未遇到其他情况.
- gcc/g++ 编译时出现:“对’xxxx’未定义的引用,collect2: error: ld returned 1 exit status” 的错误
出现的问题: 在使用 make 编译实现一个程序时,出现了下面的错误.查看程序源文件所在的目录时发现程序已经完成了编译,并生成了 list_repo.o 的文件,说明是在程序链接生成可执行文件时发生了 ...
- c编译错误[Error] ld returned 1 exit status 解决
[Error] ld returned exit status 编译的过程中出现这个错误极有可能是因为函数名错误引起的,因此回到源码中观察函数名,尤其是那些库函数中的函数.
随机推荐
- .net core系列之《将.net core应用部署到Ubuntu》
1.首先准备一个演示项目. 2.然后将这个项目用FileZilla工具上传到Ubuntu中. 3.进入目标文件,接下来有两种方法来部署项目 a.用dotnet run命令 root@hhz-virtu ...
- HTML5新增的标签和属性归纳
收集总结的HTML5的新特性,基本除了IE9以下都可以使用. HTML5语法 大部分延续了html的语法 不同之处:开头的 <!DOCTYPE html> <html lang=&q ...
- JpaRepository 查询规范
1.JpaRepository支持接口规范方法名查询.意思是如果在接口中定义的查询方法符合它的命名规则,就可以不用写实现,目前支持的关键字如下. Keyword Sample JPQL snippet ...
- Centos7安装Redis4.0.8
今天安装了CentOS7 1708 在安装redis时报错 make[1]: *** [adlist.o] 错误 127 因为Redis是C实现的,需要gcc来进行编译,所以原因是系统未安装gcc, ...
- BZOJ1499:[NOI2005]瑰丽华尔兹(DP,单调队列)
Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大的钢琴家一生都漂泊在 ...
- 【[SCOI2009]迷路】
大水题一遍 过掉比较繁琐的拆点还是非常开心的 发现每一条边的边权可能不是\(1\),但是边权的范围非常小,同时点数也非常小,只有\(n<=10\),所以我们可以将一个点拆成九个点,之后随便一连边 ...
- Hadoop学习之路(二十一)MapReduce实现Reduce Join(多个文件联合查询)
MapReduce Join 对两份数据data1和data2进行关键词连接是一个很通用的问题,如果数据量比较小,可以在内存中完成连接. 如果数据量比较大,在内存进行连接操会发生OOM.mapredu ...
- 【转】实现Http Server的三种方法
一.使用SUN公司在JDK6中提供的新包com.sun.net.httpserver JDK6提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持 ...
- 超低功耗WiFi :ESP8089
ESP8089是一个完整且自成体系的Wi-Fi网络解决方案.当ESP8089作为Wi-Fi适配器 时,可以将其与任何微控制器配合,无线网络接入可以实现在配合的任何一种处理器上p 网络连接只需通过SPI ...
- backtype.storm.generated.InvalidTopologyException:null问题的解决
程序启动报错:backtype.storm.generated.InvalidTopologyException:null 问题解决方法: 这个错误一般都是没有定义输出列造成的 检查Spout和Bol ...