# Compile error in Workbench, but not Web IDE

**URL:** <https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102>\
**Category:** Particle Workbench\
**Created:** [March 10, 2020, 2:21pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102 "2020-03-10T14:21:59Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![ctmorrison](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/ctmorrison/32/7396_2.png) [@ctmorrison](https://community.particle.io/u/ctmorrison)\
**Post date:** [March 10, 2020, 2:22pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/1 "2020-03-10T14:22:00Z")

</div>

I downloaded a couple of sample apps for the Adafruit 2.4" TFT display. I can compile on the Web IDE, but it keeps failing in Workbench. I have deleted all of the example .ino files. Below is the output from Workbench. Suggestions?

```auto
> Executing task: make -f '/Users/tom/.particle/toolchains/buildscripts/1.9.2/Makefile' compile-user -s <

:::: COMPILING APPLICATION

Creating /Users/tom/Documents/Particle/Projects-Home/TouchPaint/target/1.4.4/argon/platform_user_ram.ld ...
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawRect(short, short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawFastVLine(short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawFastHLine(short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::fillRect(short, short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::fillScreen(unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::invertDisplay(bool)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::write(unsigned char)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::Adafruit_GFX(short, short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::Adafruit_GFX(short, short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawCircle(short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawCircleHelper(short, short, short, unsigned char, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::fillCircleHelper(short, short, short, unsigned char, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::fillCircle(short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawRoundRect(short, short, short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::fillRoundRect(short, short, short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawTriangle(short, short, short, short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::fillTriangle(short, short, short, short, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawBitmap(short, short, unsigned char const*, short, short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::drawChar(short, short, unsigned char, unsigned short, unsigned short, unsigned char)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::setCursor(short, short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::setTextSize(unsigned char)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::setTextColor(unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::setTextColor(unsigned short, unsigned short)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::setTextWrap(bool)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::getRotation()'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::setRotation(unsigned char)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::width()'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `Adafruit_GFX::height()'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o): In function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_mfGFX/src/Adafruit_mfGFX.cpp:230: multiple definition of `vtable for Adafruit_GFX'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
/Users/tom/.particle/toolchains/gcc-arm/5.3.1/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/bin/ld: Warning: size of symbol `_ZTV12Adafruit_GFX' changed from 56 in ../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o) to 60 in ../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_mfGFX.o)
collect2: error: ld returned 1 exit status
make[2]: *** [/Users/tom/Documents/Particle/Projects-Home/TouchPaint/target/1.4.4/argon/TouchPaint.elf] Error 1
make[1]: *** [modules/argon/user-part] Error 2
make: *** [compile-user] Error 2
The terminal process terminated with exit code: 2

Press any key to close the terminal.

```

---

<div class="post-metadata">

**Author:** ![ScruffR](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/scruffr/32/6952_2.png) [@ScruffR](https://community.particle.io/u/ScruffR)\
**Post date:** [March 10, 2020, 2:33pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/2 "2020-03-10T14:33:14Z")

</div>

Multi-definitions are probably caused by two interfering libraries.  
You seem to have `Adafruit_GFX` _ **and** _ `Adafruit_mfGFX` installed in your project - you need to get rid of one of them.

Which library are you using for your display?

---

<div class="post-metadata">

**Author:** ![ctmorrison](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/ctmorrison/32/7396_2.png) [@ctmorrison](https://community.particle.io/u/ctmorrison)\
**Post date:** [March 10, 2020, 3:18pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/3 "2020-03-10T15:18:08Z")

</div>

In case I messed up, I delete all of the included library files. I then copied the source from the Web example `touchpaintfeatherwing.ino` into the src file in Workbench. I looked at the source and attempted to include the 3 specified libraries, but it could not find the `Adafruit_STMPE610` library. I found the `Adafruit_STMPE610RK` version of the library and decided to include it, but it also included the `Adafruit_mfGFX library` which was not referenced in the src file. Thinking I was making a logical change, I deleted the `GFX` library and modified the `#include` to be `#include <Adafruit_mfGFX>` file and modified the `project.properties` file to reflect these changes, but I’m still getting the errors (too long to include), but ending with:

```auto
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:105: multiple definition of `Adafruit_GFX::setTextWrap(bool)'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX_RK.o): In function `Adafruit_GFX::writeLine(short, short, short, short, unsigned short)':
/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:105: multiple definition of `vtable for Adafruit_GFX'
../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o):/Users/tom/Documents/Particle/Projects-Home/TouchPaint/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
/Users/tom/.particle/toolchains/gcc-arm/5.3.1/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/bin/ld: Warning: size of symbol `_ZTV12Adafruit_GFX' changed from 60 in ../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX.o) to 88 in ../../../build/target/user/platform-12-m/TouchPaint//libuser.a(Adafruit_GFX_RK.o)
collect2: error: ld returned 1 exit status
make[2]: *** [/Users/tom/Documents/Particle/Projects-Home/TouchPaint/target/1.4.4/argon/TouchPaint.elf] Error 1
make[1]: *** [modules/argon/user-part] Error 2
make: *** [compile-user] Error 2
The terminal process terminated with exit code: 2

Press any key to close the terminal.

```

---

<div class="post-metadata">

**Author:** ![ScruffR](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/scruffr/32/6952_2.png) [@ScruffR](https://community.particle.io/u/ScruffR)\
**Post date:** [March 10, 2020, 3:22pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/4 "2020-03-10T15:22:58Z")

</div>

You do mention `Adafruit_mfGFX` and `Adafruit_GFX` but have you also removed `Adafruit_GFX_RK` as this is now mentioned in your error log.

As for the reason why @rickkas7 has included another GFX library in his `Adafruit_STMPE610RK` lib I’d have to defer to him.

---

<div class="post-metadata">

**Author:** ![ctmorrison](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/ctmorrison/32/7396_2.png) [@ctmorrison](https://community.particle.io/u/ctmorrison)\
**Post date:** [March 10, 2020, 3:35pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/5 "2020-03-10T15:35:50Z")

</div>

Thanks @ScruffR for your thoughts. I won’t waste any more of your time. I was simply trying to determine all the functionality I have in this TFT display and it’s pretty cool. I was able to do all of my testing via the Web IDE and merely wondered why I had so much trouble using Workbench–uncommon from my experience with the same app.

---

<div class="post-metadata">

**Author:** ![rickkas7](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/rickkas7/32/8681_2.png) [@rickkas7](https://community.particle.io/u/rickkas7)\
**Post date:** [March 10, 2020, 3:44pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/6 "2020-03-10T15:44:03Z")

</div>

The Adafruit\_STMPE610\_RK library doesn’t include any other libraries. I don’t include Adafruit\_mfGFX in any of my libraries or ports.

```auto
name=Adafruit_STMPE610_RK
version=1.0.1
author=Adafruit
maintainer=Adafruit <info@adafruit.com>
sentence=Library for Adafruit STMPE610/811 resistive touch screen controllers. Ported by rickkas7.
paragraph=Install this library in addition to the display library for your hardware. Ported from https://github.com/adafruit/Adafruit_STMPE610 version 1.0.1
category=Display
url=https://github.com/rickkas7/Adafruit_STMPE6110_RK
architectures=*

```

---

<div class="post-metadata">

**Author:** ![ctmorrison](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/ctmorrison/32/7396_2.png) [@ctmorrison](https://community.particle.io/u/ctmorrison)\
**Post date:** [March 10, 2020, 4:00pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/7 "2020-03-10T16:00:38Z")

</div>

Aaaahhh…installing the `Adafruit_ILI9341` library resulted in the `Adafruit_mfGFX ` being installed automatically…

---

<div class="post-metadata">

**Author:** ![ctmorrison](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/ctmorrison/32/7396_2.png) [@ctmorrison](https://community.particle.io/u/ctmorrison)\
**Post date:** [March 10, 2020, 4:09pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/8 "2020-03-10T16:09:25Z")

</div>

So, my fundamental question is why source copied from the Web IDE and pasted into a source file in the Workbench, followed by including the libraries referenced in the source will compile on the Web IDE, but not in Workbench.

---

<div class="post-metadata">

**Author:** ![m\_m](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/m_m/32/18365_2.png) [@m\_m](https://community.particle.io/u/m_m)\
**Post date:** [March 10, 2020, 8:33pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/9 "2020-03-10T20:33:44Z")

</div>

hard to say without looking at the specific project. are you able to share it?

---

<div class="post-metadata">

**Author:** ![ctmorrison](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/ctmorrison/32/7396_2.png) [@ctmorrison](https://community.particle.io/u/ctmorrison)\
**Post date:** [March 10, 2020, 9:20pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/10 "2020-03-10T21:20:31Z")

</div>

I was using the `touchpoint_featherwing.ino` example in the `ADAFRUITTOUCHSCREENFEATHERWINGRK` library via the Web IDE (Build). I can compile it in the web and when using the Workbench, I can also do a cloud compile. However, if I try to do a local compile, I have to first add the libraries listed in the source. It can’t find the `Adafruit_STMPE610.h` library, so I used the `Adafruit_STMPE610RK` library. However, no matter what I try, I keep getting version of the errors listed above. The first question is why it can’t find the `Adafruit_STMPE610` library. I hope that’s what you meant by “sharing” the project.

Here’s the source for the application:

```auto
/ ***************************************************
  This is our touchscreen painting example for the Adafruit TFT FeatherWing
  ----> http://www.adafruit.com/products/3315

  Check out the links above for our tutorials and wiring diagrams

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 **************************************************** /

#include <SPI.h>
#include <Wire.h> // this is needed even tho we aren't using it

#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ILI9341.h> // Hardware-specific library
#include <Adafruit_STMPE610.h>

#ifdef ESP8266
   #define STMPE_CS 16
   #define TFT_CS 0
   #define TFT_DC 15
   #define SD_CS 2
#endif
#ifdef ESP32
   #define STMPE_CS 32
   #define TFT_CS 15
   #define TFT_DC 33
   #define SD_CS 14
#endif
#ifdef TEENSYDUINO
   #define TFT_DC 10
   #define TFT_CS 4
   #define STMPE_CS 3
   #define SD_CS 8
#endif
#ifdef ARDUINO_STM32_FEATHER
   #define TFT_DC PB4
   #define TFT_CS PA15
   #define STMPE_CS PC7
   #define SD_CS PC5
#endif
#ifdef ARDUINO_NRF52832_FEATHER /* BSP 0.6.5 and higher! */
   #define TFT_DC 11
   #define TFT_CS 31
   #define STMPE_CS 30
   #define SD_CS 27
#endif
#if defined(ARDUINO_MAX32620FTHR) || defined(ARDUINO_MAX32630FTHR)
   #define TFT_DC P5_4
   #define TFT_CS P5_3
   #define STMPE_CS P3_3
   #define SD_CS P3_2
#endif
#if defined(PARTICLE)
   #define TFT_DC D5
   #define TFT_CS D4
   #define STMPE_CS D3
   #define SD_CS D2
#endif

// Anything else!
#if defined ( __AVR_ATmega32U4__ ) || defined(ARDUINO_SAMD_FEATHER_M0) || defined ( __AVR_ATmega328P__ ) || \
    defined(ARDUINO_SAMD_ZERO) || defined( __SAMD51__ ) || defined( __SAM3X8E__ ) || defined(ARDUINO_NRF52840_FEATHER)
   #define STMPE_CS 6
   #define TFT_CS 9
   #define TFT_DC 10
   #define SD_CS 5
#endif

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);

// This is calibration data for the raw touch data to the screen coordinates
#define TS_MINX 3800
#define TS_MAXX 100
#define TS_MINY 100
#define TS_MAXY 3750

// Size of the color selection boxes and the paintbrush size
#define BOXSIZE 40
#define PENRADIUS 3
int oldcolor, currentcolor;

void setup(void) {
  Serial.begin(115200);

  delay(10);
  Serial.println("FeatherWing TFT");
  if (!ts.begin()) {
    Serial.println("Couldn't start touchscreen controller");
    while (1);
  }
  Serial.println("Touchscreen started");
  
  tft.begin();
  tft.fillScreen(ILI9341_BLACK);
  
  // make the color selection boxes
  tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
  tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
  tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
  tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
  tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
  tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
 
  // select the current color 'red'
  tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
  currentcolor = ILI9341_RED;
}

void loop() {
  // Retrieve a point  
  TS_Point p = ts.getPoint();
  
  Serial.print("X = "); Serial.print(p.x);
  Serial.print("\tY = "); Serial.print(p.y);
  Serial.print("\tPressure = "); Serial.println(p.z);  
 
 
  // Scale from ~0->4000 to tft.width using the calibration #'s
  p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width());
  p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());

  if (p.y < BOXSIZE) {
     oldcolor = currentcolor;

     if (p.x < BOXSIZE) { 
       currentcolor = ILI9341_RED; 
       tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*2) {
       currentcolor = ILI9341_YELLOW;
       tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*3) {
       currentcolor = ILI9341_GREEN;
       tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*4) {
       currentcolor = ILI9341_CYAN;
       tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*5) {
       currentcolor = ILI9341_BLUE;
       tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     } else if (p.x < BOXSIZE*6) {
       currentcolor = ILI9341_MAGENTA;
       tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
     }

     if (oldcolor != currentcolor) {
        if (oldcolor == ILI9341_RED) 
          tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
        if (oldcolor == ILI9341_YELLOW) 
          tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
        if (oldcolor == ILI9341_GREEN) 
          tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
        if (oldcolor == ILI9341_CYAN) 
          tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
        if (oldcolor == ILI9341_BLUE) 
          tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
        if (oldcolor == ILI9341_MAGENTA) 
          tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
     }
  }

  if (((p.y-PENRADIUS) > 0) && ((p.y+PENRADIUS) < tft.height())) {
    tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor);
  }
}

```

---

<div class="post-metadata">

**Author:** ![m\_m](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/m_m/32/18365_2.png) [@m\_m](https://community.particle.io/u/m_m)\
**Post date:** [March 11, 2020, 12:45am UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/11 "2020-03-11T00:45:39Z")

</div>

ah, ok. i’m able to compile using the following steps:

1. Run the `Particle: Create Project` command ([docs](https://docs.particle.io/tutorials/developer-tools/workbench/#working-with-particle-projects))
2. Once your new project loads, run the `Particle: Install Library` command then input `AdafruitTouchscreenFeatherWingRK` and press `<enter>`
3. Copy the contents of `./lib/AdafruitTouchscreenFeatherWingRK/examples/touchpaint_featherwing/touchpaint_featherwing.ino` to `./src/<your-project-name>.ino`
4. Run the `Particle: Compile application (local)` build task ([docs](https://docs.particle.io/tutorials/developer-tools/workbench/#local-build-and-flash))

I’m not sure why you are hitting problems - have you tried running the `Particle: Clean application and DeviceOS (local)` task?

Beyond that, perhaps compare my project (see `.zip` below) files and layout with yours?

[TouchPaintFeatherwingExample.zip](https://community.particle.io/uploads/short-url/694sIWTzl1dHjTjv8pCUtGSg7e7.zip) (328.4 KB)

---

<div class="post-metadata">

**Author:** ![ctmorrison](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/ctmorrison/32/7396_2.png) [@ctmorrison](https://community.particle.io/u/ctmorrison)\
**Post date:** [March 11, 2020, 1:59am UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/12 "2020-03-11T01:59:12Z")

</div>

@m_m - So…that worked for me, too. How was I suppose to know that I should simply include the …RK library? Was it due to the fact that the example was in that library listing? Perhaps just another thing that’s not too obvious to me.

Thanks so much for your assistance. I would not have figured that out my myself!

---

<div class="post-metadata">

**Author:** ![m\_m](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/m_m/32/18365_2.png) [@m\_m](https://community.particle.io/u/m_m)\
**Post date:** [March 11, 2020, 3:10pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/13 "2020-03-11T15:10:18Z")

</div>

> How was I suppose to know

always interested in suggestions on how to make this stuff more intuitive. in the meantime, have you checked out our tutorial videos?

[![](https://img.youtube.com/vi/-Sio2pxfAB0/maxresdefault.jpg "Particle 101 - Working with Firmware Libraries") ](https://www.youtube.com/watch?v=-Sio2pxfAB0)

lots more in our [youtube channel](https://www.youtube.com/channel/UCpYjkSkGOXAMXeZjZkbb-PQ) and of course there's always the [docs](https://docs.particle.io/workbench/)

---

<div class="post-metadata">

**Author:** ![ctmorrison](https://sea2.discourse-cdn.com/flex026/user_avatar/community.particle.io/ctmorrison/32/7396_2.png) [@ctmorrison](https://community.particle.io/u/ctmorrison)\
**Post date:** [March 11, 2020, 3:25pm UTC](https://community.particle.io/t/compile-error-in-workbench-but-not-web-ide/55102/14 "2020-03-11T15:25:02Z")

</div>

No, I had not viewed that video, but I’ve used numerous libraries in the past and even created and published one for NTC thermistors. What confused me is why the application would compile in the Web IDE and in the cloud via Workbench without issue, but I couldn’t find and install the library for a local compile. Furthermore, it was not obvious to me that I needed to install the …RK library in lieu of the three libraries listed in the application includes. Oh well…mystery solved. I’m not complaining above…simply conveying my confusion.

As always you guys are an amazing resource and have enabled me to do some great things with Particle devices. Thanks!
