弘毅 发表于 2012-5-25 18:39:59

使老版本库文件支持Arduino 1.0 IDE的方法

Arduino 1.0 IDE 升级以后好多老的库文件在1.0下无法编译了。。让大家很痛苦。今天介绍下,怎么修改老的库文件,使其支持Arduino 1.0 IDE。

以DS1302的库为例,首先我们打开库文件。可以看到里面有两个文件,一个是DS1302.cpp,一个是DS1302.h。



用notepad++等文本编辑器,打开DS1302.cpp,会看到里面有一个“#include "WProgram.h"”字段



同样打开DS1302.h,也会看到里面有一个“#include "WProgram.h"”字段。



我们把两个文件的“#include "WProgram.h""字段替换为#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif变为下图这样子





把修改好的库放入Arduino 1.0 IDE中,就可以正常编译了。

其实问题原因也比较简单,以前老版本中调用的WProgram.h,在1.0 IDE中改名为Arduino.h了~~~~只要替换掉相应字段,就可以使用了。

飞翔的红猪 发表于 2012-5-25 19:39:17

恍然大悟!

开心就好 发表于 2012-5-26 23:18:51

好帖呀,回头试试

maximus 发表于 2012-5-27 15:33:59

无比感激!
好像IDE从0023开始就这样了?

maximus 发表于 2012-5-27 15:56:44

maximus 发表于 2012-5-27 15:33 static/image/common/back.gif
无比感激!
好像IDE从0023开始就这样了?

我是说,用0023就不能编译ps2手柄的库,难不成0022和0023的wprogram.h和.cpp还不同??
不过我把0023里hardware\arduino\cores的东西全复制到新IDE的同样位置下,原来不能编译的也能编译了,而且不用一个库一个库得改。。

arduino-tinker 发表于 2012-5-27 17:07:55

有个疑问,那哪些库文件属于老的?哪些属于新的?

Randy 发表于 2012-5-27 18:22:40

arduino-tinker 发表于 2012-5-27 17:07 static/image/common/back.gif
有个疑问,那哪些库文件属于老的?哪些属于新的?

请您认真看一下弘毅站长的帖子!以前老版本中调用的WProgram.h,在1.0 IDE中改名为Arduino.h了

Ansifa 发表于 2012-7-1 21:43:36

{:soso_e136:}原来这样,我才知道。。。。

CY57 发表于 2012-7-2 01:42:24

收藏學習了,貌似我同學也遇到了這個問題,明天給他講

战舸 发表于 2012-10-13 18:04:26

原来如此,怪不得boxz程序在1.0版本中编译出错:o:@:P

xpaul 发表于 2012-11-11 17:52:43

{:soso_e179:}

xpaul 发表于 2012-11-11 17:52:59

{:soso_e179:}

长长牙齿 发表于 2012-11-30 22:04:50

这两天试了一个LCM1602 IIC的库,貌似只是改WProgram.h 为 Arduino.h 还不能完全解决问题。只好找了一个号称支持1.0IDE的库,才搞定了。

wanji 发表于 2013-7-8 17:34:19

好贴,顶一个{:soso_e179:}

303931362 发表于 2014-1-14 14:34:36

Arduino:1.5.5 (Windows 7), 板:"Arduino Uno"

Using library Wire in folder: D:\Program Files\Arduino\hardware\arduino\avr\libraries\Wire (pre-1.5)

Using library LiquidCrystal_I2C in folder: D:\Program Files\Arduino\libraries\LiquidCrystal_I2C (pre-1.5)



D:\Program Files\Arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=155 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -ID:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -ID:\Program Files\Arduino\hardware\arduino\avr\variants\standard -ID:\Program Files\Arduino\hardware\arduino\avr\libraries\Wire -ID:\Program Files\Arduino\libraries\LiquidCrystal_I2C C:\Users\WANGXU~1\AppData\Local\Temp\build3721494744682372248.tmp\HelloWorld.cpp -o C:\Users\WANGXU~1\AppData\Local\Temp\build3721494744682372248.tmp\HelloWorld.cpp.o

In file included from HelloWorld.pde:2:
D:\Program Files\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:80: error: conflicting return type specified for 'virtual void LiquidCrystal_I2C::write(uint8_t)'
D:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'
页: [1] 2
查看完整版本: 使老版本库文件支持Arduino 1.0 IDE的方法