JsonParserGeneratorRK "swap" error on FW 2.0.0rc2

EDIT: See my reply to this below


I am not an expert here, but I tried to use the JsonParserGeneratorRK library on the 2.0.0 fw and I get an error (Another project using fw1.5.2 compiles fine).

In this case, all I have done is to include the library and declare the parser object, and I get the error below. I suspect this is due to the writer of the library creating a macro named “swap” and this is conflicting with something in the tool chain.

This doesn’t compile locally or in the cloud, same error.

Assuming I am right about the cause of the error, is there a quick fix, or will I have to edit the library?

Error follows:

make -C ../../../user 
make[2]: Entering directory '/firmware/user'
Building cpp file: src/LED_Sign.cpp
Invoking: ARM GCC CPP Compiler
mkdir -p ../build/target/user/platform-12-msrc/
arm-none-eabi-gcc -DSTM32_DEVICE -DnRF52840 -DNRF52840_XXAA -DPLATFORM_THREADING=1 -DPLATFORM_ID=12 -DPLATFORM_NAME=argon -DPLATFORM_GEN=3 -DUSBD_VID_SPARK=0x2B04 -DUSBD_PID_DFU=0xD00C -DUSBD_PID_CDC=0xC00C -DSPARK_PLATFORM -g3 -gdwarf-2 -Os -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16 --specs=nano.specs -DINCLUDE_PLATFORM=1 -DSOFTDEVICE_PRESENT=1 -DS140 -DPRODUCT_ID=12 -DPRODUCT_FIRMWARE_VERSION=65535 -D_WIZCHIP_=W5500 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DLFS_CONFIG=lfs_config.h -DSYSTEM_VERSION_STRING=2.0.0-rc.2 -DRELEASE_BUILD -I./inc -I../wiring/inc -I../system/inc -I../services/inc -I../third_party/nanopb/nanopb -I../communication/inc -I../hal/inc -I../hal/shared -I../hal/src/argon -I../hal/network/lwip/esp32 -I../hal/src/nRF52840 -I../hal/src/armv7 -I../hal/src/nRF52840 -I../hal/src/nRF52840/lwip -I../hal/src/nRF52840/freertos -I../hal/src/nRF52840/mbedtls -I../hal/src/nRF52840/littlefs -I../hal -I../hal/src/nRF52840/posix -I../hal/network -I../hal/network/api -I../hal/network/lwip -I../hal/network/lwip/posix -I../hal/network/lwip/wiznet -I../hal/network/ncp -I../hal/network/ncp/at_parser -I../hal/network/util -I../third_party/lwip/lwip/src/include -I../third_party/freertos/freertos/FreeRTOS/Source/include -I../third_party/nrf5_sdk/nrf5_sdk/external/freertos/portable/GCC/nrf52 -I../third_party/nrf5_sdk/nrf5_sdk/external/freertos/portable/CMSIS/nrf52 -I../third_party/wiznet_driver/wiznet_driver/Ethernet -I../gsm0710muxer/gsm0710muxer/include -I../platform/shared/inc -I../third_party/nrf5_sdk -I../third_party/nrf5_sdk/nrf5_sdk/components/toolchain/cmsis/include -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/drivers -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/drivers/include -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/hal -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/mdk -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/hal -I../third_party/nrf5_sdk/nrf5_sdk/modules/nrfx/drivers/src/prs -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/util -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140/headers -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140/headers/nrf52 -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/common -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/mbr/nrf52840/headers -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/fstorage -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/experimental_section_vars -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/atomic -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/crc32 -I../third_party/nrf5_sdk/nrf5_sdk/integration/nrfx/legacy -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/delay -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/log -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/log -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/log/src -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/experimental_section_vars -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/atomic -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/delay -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/queue -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/common -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140 -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140/headers -I../third_party/nrf5_sdk/nrf5_sdk/components/softdevice/s140/headers/nrf52 -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/fifo -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/atomic_fifo -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/strerror -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/fstorage -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/atomic_flags -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/usbd -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/usbd/class/cdc -I../third_party/nrf5_sdk/nrf5_sdk/components/libraries/usbd/class/cdc/acm -I../third_party/nrf5_sdk/nrf5_sdk/components/ble/common -I../third_party/nrf5_sdk/nrf5_sdk/components/ble/nrf_ble_gatt -I../third_party/nrf5_sdk/nrf5_sdk/components/ble/ble_advertising -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/t2t_lib -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/platform -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/generic/message -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/generic/record -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/lauchapp -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/text -I../third_party/nrf5_sdk/nrf5_sdk/components/nfc/ndef/uri -I../third_party/nrf5_sdk/nrf5_sdk/external/nrf_cc310/include -I../third_party/nrf5_sdk/nrf5_sdk/external/utf_converter -I../third_party/littlefs/littlefs -I../third_party/miniz/miniz -I../platform/MCU/nRF52840/inc -I../dynalib/inc -Isrc -I./libraries -Ilib/neomatrix/src -Ilib/JsonParserGeneratorRK/src -Ilib/neopixel/src -Ilib/Adafruit_GFX/src -I. -MD -MP -MF ../build/target/user/platform-12-msrc/LED_Sign.o.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -Wundef -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DSPARK_PLATFORM_NET=ESP32 -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc  -DLOG_INCLUDE_SOURCE_INFO=1 -DPARTICLE_USER_MODULE -DUSER_FIRMWARE_IMAGE_SIZE=0x20000 -DUSER_FIRMWARE_IMAGE_LOCATION=0xD4000 -DMODULAR_FIRMWARE=1 -DMODULE_VERSION=6 -DMODULE_FUNCTION=5 -DMODULE_INDEX=1 -DMODULE_DEPENDENCY=4,1,2005 -DMODULE_DEPENDENCY2=0,0,0 -D_GNU_SOURCE -DLOG_MODULE_CATEGORY="\"app\""  -fno-exceptions -fno-rtti -fcheck-new -std=gnu++14 -c -o ../build/target/user/platform-12-msrc/LED_Sign.o src/LED_Sign.cpp
In file included from /usr/local/gcc-arm-embedded/arm-none-eabi/include/c++/9.2.1/vector:67,
                 from lib/JsonParserGeneratorRK/src/JsonParserGeneratorRK.h:7,
                 from src/LED_Sign.ino:30:
/usr/local/gcc-arm-embedded/arm-none-eabi/include/c++/9.2.1/bits/stl_vector.h:1477:23: error: macro "swap" requires 2 arguments, but only 1 given
 1477 |       swap(vector& __x) _GLIBCXX_NOEXCEPT
      |                       ^
In file included from src/LED_Sign.ino:27:
lib/Adafruit_GFX/src/Adafruit_GFX.h:7: note: macro "swap" defined here
    7 | #define swap(a, b) { int16_t t = a; a = b; b = t; }
      | 
In file included from /usr/local/gcc-arm-embedded/arm-none-eabi/include/c++/9.2.1/vector:67,
                 from lib/JsonParserGeneratorRK/src/JsonParserGeneratorRK.h:7,
                 from src/LED_Sign.ino:30:
/usr/local/gcc-arm-embedded/arm-none-eabi/include/c++/9.2.1/bits/stl_vector.h:1936:60: error: macro "swap" passed 4 arguments, but takes just 2
 1936 |     swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
      |                                                            ^
In file included from src/LED_Sign.ino:27:
lib/Adafruit_GFX/src/Adafruit_GFX.h:7: note: macro "swap" defined here
    7 | #de
	at makeError (/Users/jed/.vscode/extensions/particle.particle-vscode-core-1.12.3/node_modules/execa/lib/error.js:58:11)
	at handlePromise (/Users/jed/.vscode/extensions/particle.particle-vscode-core-1.12.3/node_modules/execa/index.js:114:26)
	at runMicrotasks (<anonymous>)
	at processTicksAndRejections (internal/process/task_queues.js:94:5)

- - - -

I noticed that the project with the error was using the JsonParserGeneratorRK lib v1.1.3, but that my working project was using v1.1.1

I switched to 1.1.1 and it works.

(Note: I pulled the library using the “Particle Install Library” command on VSCode.)

So 1.1.3 is not compatible with fw 2.0.0rc2.

I am somewhat new to this, should I be reporting this as a bug to the lib author or to Particle Devs? If Particle Devs, where do I do that?

The problem isn’t in really JsonParserGeneratorRK, it’s in the version of the Adafruit_GFX library that you are using.

There’s a newer version of Adafruit_GFX in Adafruit_GFX_RK that uses the macro _swap_int16_t instead of the poorly named swap macro.

It’s not really Device OS 2.0.0 that’s causing the issue, it’s that it upgrades the compiler to gcc 9.2.1, combined with the fact that newer versions of JsonParserGeneratorRK use std::vector.

But the underlying problem is that Adafruit GFX should not define a macro called swap because it breaks std::vector() and they’ve already fixed it in later versions of GFX, you just need to pick up a newer version of GFX, and the easiest way is to use Adafruit_GFX_RK.

I just posted this to your github as an issue, and then this exact point occurred to me, as per the error message. I cleared the issue on your github. Maybe that will help someone!

I’ll look into upgrading the adafruit library, but I think that also gave me trouble. Thanks for your help!

I am sorry to bother you with this, but I am not sure where else to ask this question. I am having trouble updating the libraries…

  1. I first added your adafruit_GFX_RK library, commented out the old include, and added this.

  2. I deleted the old JsonParser 1.1.1 folder and re-installed from VSCode, so 1.1.3 is on the system.

  3. Eventually I even deleted out the old adafruit_GFX folder. But I am still getting this:

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


:::: COMPILING APPLICATION

Creating /Users/jed/github/LED_Sign/target/2.0.0-rc.2/argon/platform_user_ram.ld ...
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawFastVLine(short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:259: multiple definition of `Adafruit_GFX::drawFastVLine(short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:470: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawFastHLine(short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:275: multiple definition of `Adafruit_GFX::drawFastHLine(short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:476: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::fillRect(short, short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:292: multiple definition of `Adafruit_GFX::fillRect(short, short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:482: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::fillScreen(unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:306: multiple definition of `Adafruit_GFX::fillScreen(unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:489: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawRect(short, short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:507: multiple definition of `Adafruit_GFX::drawRect(short, short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:462: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::invertDisplay(bool)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:1458: multiple definition of `Adafruit_GFX::invertDisplay(bool)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:729: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:321: multiple definition of `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:420: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::setRotation(unsigned char)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:1252: multiple definition of `Adafruit_GFX::setRotation(unsigned char)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:703: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::Adafruit_GFX(short, short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:104: multiple definition of `Adafruit_GFX::Adafruit_GFX(short, short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:297: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::Adafruit_GFX(short, short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:104: multiple definition of `Adafruit_GFX::Adafruit_GFX(short, short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:297: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawCircle(short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:346: multiple definition of `Adafruit_GFX::drawCircle(short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:311: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawCircleHelper(short, short, short, unsigned char, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:395: multiple definition of `Adafruit_GFX::drawCircleHelper(short, short, short, unsigned char, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:345: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::fillCircleHelper(short, short, short, unsigned char, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:460: multiple definition of `Adafruit_GFX::fillCircleHelper(short, short, short, unsigned char, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:388: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::fillCircle(short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:440: multiple definition of `Adafruit_GFX::fillCircle(short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:381: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawRoundRect(short, short, short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:528: multiple definition of `Adafruit_GFX::drawRoundRect(short, short, short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:495: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::fillRoundRect(short, short, short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:557: multiple definition of `Adafruit_GFX::fillRoundRect(short, short, short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:510: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawTriangle(short, short, short, short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:582: multiple definition of `Adafruit_GFX::drawTriangle(short, short, short, short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:522: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::fillTriangle(short, short, short, short, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:601: multiple definition of `Adafruit_GFX::fillTriangle(short, short, short, short, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:531: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawBitmap(short, short, unsigned char const*, short, short, unsigned short)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:694: multiple definition of `Adafruit_GFX::drawBitmap(short, short, unsigned char const*, short, short, unsigned short)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:608: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::drawChar(short, short, unsigned char, unsigned short, unsigned short, unsigned char)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:1058: multiple definition of `Adafruit_GFX::drawChar(short, short, unsigned char, unsigned short, unsigned short, unsigned char)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:641: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::write(unsigned char)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:1179: multiple definition of `Adafruit_GFX::write(unsigned char)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:621: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o): in function `Adafruit_GFX::setTextSize(unsigned char, unsigned char)':
/Users/jed/github/LED_Sign/lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:1241: multiple definition of `Adafruit_GFX::setTextSize(unsigned char)'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):/Users/jed/github/LED_Sign/lib/Adafruit_GFX/src/Adafruit_GFX.cpp:680: first defined here
/Users/jed/.particle/toolchains/gcc-arm/9.2.1/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX_RK.o):(.rodata._ZTV12Adafruit_GFX+0x0): multiple definition of `vtable for Adafruit_GFX'; ../../../build/target/user/platform-12-m/LED_Sign//libuser.a(Adafruit_GFX.o):(.rodata._ZTV12Adafruit_GFX+0x0): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [/Users/jed/github/LED_Sign/target/2.0.0-rc.2/argon/LED_Sign.elf] Error 1
make[1]: *** [modules/argon/user-part] Error 2
make: *** [compile-user] Error 2
The terminal process "/bin/bash '-c', 'make -f '/Users/jed/.particle/toolchains/buildscripts/1.9.2/Makefile' compile-user -s'" terminated with exit code: 2.

Press any key to close the terminal.

It looks to me like my project still thinks the old adafruit code is in there? I even updated the properties file for the entire VSCode folder, but that doesn’t help.

How have you uninstalled the previous versions?
Have you also removed the dependency entries from the project.properties file?

I removed the entries from the project.properties file, and I deleted the folder from the project too.

Is there a specific command to uninstall the library? The only particle quick command in VSCode that contains “library” is the install command.

I did a cloud compile, and found this in the error output. References to the old library v 0.0.0

I can’t find any references inside my code though…

attempting to compile firmware
Compile failed: Processing  src/LED_Sign.ino
Checking library neomatrix...
Checking library neopixel...
Checking library Adafruit_GFX_RK...
Checking library JsonParserGeneratorRK...
Installing library JsonParserGeneratorRK 0.1.3 to lib/JsonParserGeneratorRK ...
Installing library neomatrix 0.3.0 to lib/neomatrix ...
Installing library neopixel 1.0.0 to lib/neopixel ...
Installing library Adafruit_GFX_RK 1.5.8 to lib/Adafruit_GFX_RK ...
Library neomatrix 0.3.0 installed.
Checking library Adafruit_GFX...
Library neopixel 1.0.0 installed.
Installing library Adafruit_GFX 0.0.0 to lib/Adafruit_GFX ...
Library JsonParserGeneratorRK 0.1.3 installed.
Library Adafruit_GFX_RK 1.5.8 installed.
Library Adafruit_GFX 0.0.0 installed.
make -C ../modules/argon/user-part all
make[1]: Entering directory '/firmware/modules/argon/user-part'

Here’s the results of seaching through my entire project. They all seem to be references from within the RK version…

24 results - 8 files

lib/Adafruit_GFX_RK/README.md:
  10  
  11: Recent Arduino IDE releases include the Library Manager for easy installation. Otherwise, to download, click the DOWNLOAD ZIP button, uncompress and rename the uncompressed folder Adafruit_GFX. Confirm that the Adafruit_GFX folder contains Adafruit_GFX.cpp and Adafruit_GFX.h. Place the Adafruit_GFX library folder your <arduinosketchfolder>/Libraries/ folder. You may need to create the Libraries subfolder if its your first library. Restart the IDE.
  12  

  20  
  21: - 'fontconvert' folder contains a command-line tool for converting TTF fonts to Adafruit_GFX .h format.
  22  

lib/Adafruit_GFX_RK/src/Adafruit_GFX_RK.cpp:
  1487  void Adafruit_GFX_Button::initButton(
  1488:  Adafruit_GFX *gfx, int16_t x, int16_t y, uint16_t w, uint16_t h,
  1489   uint16_t outline, uint16_t fill, uint16_t textcolor,

  1514  void Adafruit_GFX_Button::initButton(
  1515:  Adafruit_GFX *gfx, int16_t x, int16_t y, uint16_t w, uint16_t h,
  1516   uint16_t outline, uint16_t fill, uint16_t textcolor,

  1539  void Adafruit_GFX_Button::initButtonUL(
  1540:  Adafruit_GFX *gfx, int16_t x1, int16_t y1, uint16_t w, uint16_t h,
  1541   uint16_t outline, uint16_t fill, uint16_t textcolor,

  1563  void Adafruit_GFX_Button::initButtonUL(
  1564:  Adafruit_GFX *gfx, int16_t x1, int16_t y1, uint16_t w, uint16_t h,
  1565   uint16_t outline, uint16_t fill, uint16_t textcolor,

lib/Adafruit_GFX_RK/src/Adafruit_GFX.h:
   15  /// A generic graphics superclass that can handle all sorts of drawing. At a minimum you can subclass and provide drawPixel(). At a maximum you can do a ton of overriding to optimize. Used for any/all Adafruit displays!
   16: class Adafruit_GFX : public Print {
   17  

   56  
   57:   // These exist only with Adafruit_GFX (no subclass overrides)
   58    void

  251    // "Classic" initButton() uses center & size
  252:   void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y,
  253     uint16_t w, uint16_t h, uint16_t outline, uint16_t fill,
  254     uint16_t textcolor, char *label, uint8_t textsize);
  255:   void initButton(Adafruit_GFX *gfx, int16_t x, int16_t y,
  256     uint16_t w, uint16_t h, uint16_t outline, uint16_t fill,

  258    // New/alt initButton() uses upper-left corner & size
  259:   void initButtonUL(Adafruit_GFX *gfx, int16_t x1, int16_t y1,
  260     uint16_t w, uint16_t h, uint16_t outline, uint16_t fill,
  261     uint16_t textcolor, char *label, uint8_t textsize);
  262:   void initButtonUL(Adafruit_GFX *gfx, int16_t x1, int16_t y1,
  263     uint16_t w, uint16_t h, uint16_t outline, uint16_t fill,

  287   private:
  288:   Adafruit_GFX *_gfx;
  289    int16_t       _x1, _y1; // Coordinates of top-left corner

  300  /// A GFX 1-bit canvas context for graphics
  301: class GFXcanvas1 : public Adafruit_GFX {
  302   public:

  319  /// A GFX 8-bit canvas context for graphics
  320: class GFXcanvas8 : public Adafruit_GFX {
  321   public:

  339  ///  A GFX 16-bit canvas context for graphics
  340: class GFXcanvas16 : public Adafruit_GFX {
  341   public:

lib/Adafruit_GFX_RK/src/Adafruit_SPITFT.h:
  117  */
  118: class Adafruit_SPITFT : public Adafruit_GFX {
  119  

lib/Adafruit_GFX_RK/src/gfxfont.h:
  1: // Font structures for newer Adafruit_GFX (1.1 and later).
  2  // Example fonts are included in 'Fonts' directory.

lib/Adafruit_GFX_RK/src/glcdfont.c:
  1: // This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
  2  // See gfxfont.h for newer custom bitmap font info.

lib/neomatrix/src/neomatrix.cpp:
   4    displays assembled from NeoPixel strips, making them compatible with
   5:   the Adafruit_GFX graphics library.  Requires both the Adafruit_NeoPixel
   6:   and Adafruit_GFX libraries.
   7  

  53  
  54: // Expand 16-bit input color (Adafruit_GFX colorspace) to 24-bit (NeoPixel)
  55  // (w/gamma adjustment)

target/2.0.0-rc.2/argon/LED_Sign.lst:
  2422  
  2423: // Expand 16-bit input color (Adafruit_GFX colorspace) to 24-bit (NeoPixel)
  2424  // (w/gamma adjustment)

It’s the neomatrix library that’s pulling in the other copy of Adafruit_GFX:

Rather than go down the whole chain of fixing dependent versions of Adafruit_GFX, there might be another way to resolve your issue.

Either make sure JsonParserGeneratorRK.h is included before any other includes, or, before including it:

#undef swap

Also remove Adafruit_GFX_RK from project.properties and also from lib.

I’ll try those suggestions. I ran a “Particle clean application” and that seemed to help, but now I have the swap problem again, I suspect in the neomatrix library…

In file included from ./inc/application.h:95,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_arduino.h:60: note: this is the location of the previous definition
   60 | #define pgm_read_byte(x)      (*(x))
      | 
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp: In member function 'virtual void Adafruit_NeoMatrix::drawPixel(int16_t, int16_t, uint16_t)':
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:137:26: error: no matching function for call to 'swap(uint16_t&, uint16_t&)'
  137 |         swap(major, minor);
      |                          ^
In file included from ../wiring/inc/spark_wiring_wifi_credentials.h:34,
                 from ../wiring/inc/spark_wiring_wifi.h:39,
                 from ../wiring/inc/spark_wiring.h:44,
                 from ./inc/application.h:42,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_vector.h:668:13: note: candidate: 'template<class T, class AllocatorT> void spark::swap(spark::Vector<T, AllocatorT>&, spark::Vector<T, AllocatorT>&)'
  668 | inline void spark::swap(Vector<T, AllocatorT>& vector, Vector<T, AllocatorT>& vector2) {
      |             ^~~~~
../wiring/inc/spark_wiring_vector.h:668:13: note:   template argument deduction/substitution failed:
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:137:26: note:   mismatched types 'spark::Vector<T, AllocatorT>' and 'uint16_t' {aka 'short unsigned int'}
  137 |         swap(major, minor);
      |                          ^
In file included from ../wiring/inc/spark_wiring_async.h:22,
                 from ../wiring/inc/spark_wiring_cloud.h:35,
                 from ../wiring/inc/spark_wiring.h:50,
                 from ./inc/application.h:42,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_error.h:129:13: note: candidate: 'void particle::swap(particle::Error&, particle::Error&)' <near match>
  129 | inline void particle::swap(Error& error1, Error& error2) {
      |             ^~~~~~~~
../wiring/inc/spark_wiring_error.h:129:13: note:   conversion of argument 2 would be ill-formed:
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:137:21: error: invalid user-defined conversion from 'uint16_t' {aka 'short unsigned int'} to 'particle::Error&' [-fpermissive]
  137 |         swap(major, minor);
      |                     ^~~~~
In file included from ../wiring/inc/spark_wiring_async.h:22,
                 from ../wiring/inc/spark_wiring_cloud.h:35,
                 from ../wiring/inc/spark_wiring.h:50,
                 from ./inc/application.h:42,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_error.h:69:8: note: candidate is: 'particle::Error::Error(particle::Error::Type)' <near match>
   69 | inline particle::Error::Error(Type type) :
      |        ^~~~~~~~
../wiring/inc/spark_wiring_error.h:69:8: note:   conversion of argument 1 would be ill-formed:
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:137:21: error: invalid conversion from 'uint16_t' {aka 'short unsigned int'} to 'particle::Error::Type' [-fpermissive]
  137 |         swap(major, minor);
      |                     ^~~~~
      |                     |
      |                     uint16_t {aka short unsigned int}
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:137:21: error: invalid conversion from 'uint16_t' {aka 'short unsigned int'} to 'particle::Error::Type' [-fpermissive]
In file included from ../wiring/inc/spark_wiring_async.h:22,
                 from ../wiring/inc/spark_wiring_cloud.h:35,
                 from ../wiring/inc/spark_wiring.h:50,
                 from ./inc/application.h:42,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_error.h:69:36: note:   initializing argument 1 of 'particle::Error::Error(particle::Error::Type)'
   69 | inline particle::Error::Error(Type type) :
      |                               ~~~~~^~~~
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:137:26: error: conversion to non-const reference type 'class particle::Error&' from rvalue of type 'particle::Error' [-fpermissive]
  137 |         swap(major, minor);
      |                          ^
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:174:24: error: no matching function for call to 'swap(uint16_t&, uint16_t&)'
  174 |       swap(major, minor);
      |                        ^
In file included from ../wiring/inc/spark_wiring_wifi_credentials.h:34,
                 from ../wiring/inc/spark_wiring_wifi.h:39,
                 from ../wiring/inc/spark_wiring.h:44,
                 from ./inc/application.h:42,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_vector.h:668:13: note: candidate: 'template<class T, class AllocatorT> void spark::swap(spark::Vector<T, AllocatorT>&, spark::Vector<T, AllocatorT>&)'
  668 | inline void spark::swap(Vector<T, AllocatorT>& vector, Vector<T, AllocatorT>& vector2) {
      |             ^~~~~
../wiring/inc/spark_wiring_vector.h:668:13: note:   template argument deduction/substitution failed:
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:174:24: note:   mismatched types 'spark::Vector<T, AllocatorT>' and 'uint16_t' {aka 'short unsigned int'}
  174 |       swap(major, minor);
      |                        ^
In file included from ../wiring/inc/spark_wiring_async.h:22,
                 from ../wiring/inc/spark_wiring_cloud.h:35,
                 from ../wiring/inc/spark_wiring.h:50,
                 from ./inc/application.h:42,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_error.h:129:13: note: candidate: 'void particle::swap(particle::Error&, particle::Error&)' <near match>
  129 | inline void particle::swap(Error& error1, Error& error2) {
      |             ^~~~~~~~
../wiring/inc/spark_wiring_error.h:129:13: note:   conversion of argument 2 would be ill-formed:
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:174:19: error: invalid user-defined conversion from 'uint16_t' {aka 'short unsigned int'} to 'particle::Error&' [-fpermissive]
  174 |       swap(major, minor);
      |                   ^~~~~
In file included from ../wiring/inc/spark_wiring_async.h:22,
                 from ../wiring/inc/spark_wiring_cloud.h:35,
                 from ../wiring/inc/spark_wiring.h:50,
                 from ./inc/application.h:42,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_error.h:69:8: note: candidate is: 'particle::Error::Error(particle::Error::Type)' <near match>
   69 | inline particle::Error::Error(Type type) :
      |        ^~~~~~~~
../wiring/inc/spark_wiring_error.h:69:8: note:   conversion of argument 1 would be ill-formed:
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:174:19: error: invalid conversion from 'uint16_t' {aka 'short unsigned int'} to 'particle::Error::Type' [-fpermissive]
  174 |       swap(major, minor);
      |                   ^~~~~
      |                   |
      |                   uint16_t {aka short unsigned int}
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:174:19: error: invalid conversion from 'uint16_t' {aka 'short unsigned int'} to 'particle::Error::Type' [-fpermissive]
In file included from ../wiring/inc/spark_wiring_async.h:22,
                 from ../wiring/inc/spark_wiring_cloud.h:35,
                 from ../wiring/inc/spark_wiring.h:50,
                 from ./inc/application.h:42,
                 from ./inc/Particle.h:5,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.h:22,
                 from /Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:36:
../wiring/inc/spark_wiring_error.h:69:36: note:   initializing argument 1 of 'particle::Error::Error(particle::Error::Type)'
   69 | inline particle::Error::Error(Type type) :
      |                               ~~~~~^~~~
/Users/jed/github/LED_Sign/lib/neomatrix/src/neomatrix.cpp:174:24: error: conversion to non-const reference type 'class particle::Error&' from rvalue of type 'particle::Error' [-fpermissive]
  174 |       swap(major, minor);
      |                        ^
make[3]: *** [../build/target/user/platform-12-m/LED_Sign/neomatrix/src/neomatrix.o] Error 1
make[2]: *** [user] Error 2
make[1]: *** [modules/argon/user-part] Error 2
make: *** [compile-user] Error 2
The terminal process "/bin/bash '-c', 'make -f '/Users/jed/.particle/toolchains/buildscripts/1.9.2/Makefile' compile-user -s'" terminated with exit code: 2.

Press any key to close the terminal.