From 1f3688f5aed246e2f8aaabded30027e515dcf266 Mon Sep 17 00:00:00 2001 From: mcelb1200 <156725804+mcelb1200@users.noreply.github.com> Date: Wed, 26 Nov 2025 08:37:33 +1100 Subject: [PATCH 1/2] Change begin method to inline in BLEMIDI_ESP32 to prevent linker errors Add inline to begin() to prevent linker errors When using the `lathoub/BLE-MIDI` library in a PlatformIO project with `ESPAsyncWebServer`, a "multiple definition" linker error occurs for the `BLEMIDI_ESP32::begin` function. This is because the function is defined in the header file `hardware/BLEMIDI_ESP32.h`, and this header is included in multiple source files. --- src/hardware/BLEMIDI_ESP32.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardware/BLEMIDI_ESP32.h b/src/hardware/BLEMIDI_ESP32.h index 7c49560..34a6054 100644 --- a/src/hardware/BLEMIDI_ESP32.h +++ b/src/hardware/BLEMIDI_ESP32.h @@ -128,7 +128,7 @@ class MyCharacteristicCallbacks : public BLECharacteristicCallbacks }; template -bool BLEMIDI_ESP32<_Settings>::begin(const char *deviceName, BLEMIDI_Transport, _Settings> *bleMidiTransport) +inline bool BLEMIDI_ESP32<_Settings>::begin(const char *deviceName, BLEMIDI_Transport, _Settings> *bleMidiTransport) { _bleMidiTransport = bleMidiTransport; From 5af36f95d6712df54a300cef96d6cd7e8daf3429 Mon Sep 17 00:00:00 2001 From: mcelb1200 <156725804+mcelb1200@users.noreply.github.com> Date: Wed, 26 Nov 2025 08:49:56 +1100 Subject: [PATCH 2/2] Log - fix linker error in `BLEMIDI_ESP32::begin` When using the `lathoub/BLE-MIDI` library in a PlatformIO project with `ESPAsyncWebServer`, a "multiple definition" linker error occurs for the `BLEMIDI_ESP32::begin` function. This is because the function is defined in the header file `hardware/BLEMIDI_ESP32.h`, and this header is included in multiple source files. --- ble-midi-repro.zip | Bin 0 -> 6921 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ble-midi-repro.zip diff --git a/ble-midi-repro.zip b/ble-midi-repro.zip new file mode 100644 index 0000000000000000000000000000000000000000..6ad27fc2869f150a1b19a65a0f4836dcca2ad7c3 GIT binary patch literal 6921 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 DeMCGB literal 0 HcmV?d00001