Problem:
When trying to compile a firmware for an STM32 microcontroller, you see a compiler error message like
myheader.h:23:12: error: expected constructor, destructor, or type conversion before ‘(’ token 23 | __declspec(dllexport) int myfunc(
Solution:
We previously explored the same problem for Linux platforms.
__declspec(dllexport)
is a Windows-specific feature and not available on non-Windows platform such as the ARM embedded API platform (e.g. STM32). In order to fix it in a compatible way with both Windows and the STM32, add the following code either in a header that is included in every file containing __declspec(dllexport)
or add it in each file where the error occurs:
#ifdef __ARM_EABI__ #define __declspec(v) #endif
This will basically ignore any __declspec()
call on the preprocessor level.
By using __ARM_EABI__
specfically, the definition will not trigger for ARM platforms for Windows.