I was using arm gnu gcc toolchain 6.3.1 earlier and the following piece of code compiles without any errors.
__inline unsigned int add(unsigned int i, unsigned int j) { // some random sample code for example int ans = 0; for (int a = 0; a < j; a++) { ans = ans + 2; } for (int a = 0; a < i; a++) { ans = ans + 2; } for (int a = 0; a < j; a++) { ans = ans - 1; } for (int a = 0; a < i; a++) { ans = ans - 1; } return ans; } unsigned int add1(unsigned int i, unsigned int j) { return add(i, j); } unsigned int add2(unsigned int i, unsigned int j) { return add(i, j); } unsigned int add3(unsigned int i, unsigned int j) { return add(i, j); } unsigned int add4(unsigned int i, unsigned int j) { return add(i, j); }
When when I updated the toolchain to 10.2.1 I was getting the inline function as undefined
arm-none-eabi-ld: libapps.a(hello_main.o): in function `add1': hello/hello_main.c:84: undefined reference to `add' arm-none-eabi-ld: libapps.a(hello_main.o): in function `add2': hello/hello_main.c:89: undefined reference to `add' arm-none-eabi-ld: libapps.a(hello_main.o): in function `add3': hello/hello_main.c:94: undefined reference to `add' arm-none-eabi-ld: libapps.a(hello_main.o): in function `add4': hello/hello_main.c:99: undefined reference to `add'
As far as I understand, the compilers are backward compatible so I shouldn't be getting any errors for using a new toolchain version. Is there any way to fix the undefined inline functions error if possible without making any modifications to the existing code.
Also could someone please explain what difference in the toolchains has caused this issue?