Multiple declaration error when adding header file

Hello,
I am working on stm32. I am using stm32cubeide ,I worked on 2 cores controller .I am IO.h and IO.c in both core.When I add the IO.h in IO.c its working fine when I try to add IO.h file in another source files it through errors below.

c:\st\stm32cubeide_1.8.0\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o:D:/Project/PL_REV1/CM4/Debug/…/Core/Inc/IO.h:107: multiple definition of P2_2'; ./Core/Src/IO.o:D:/Project/PL_REV1/CM4/Debug/../Core/Inc/IO.h:107: first defined here c:\st\stm32cubeide_1.8.0\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o:D:/Project/PL_REV1/CM4/Debug/../Core/Inc/IO.h:108: multiple definition of P2_3’; ./Core/Src/IO.o:D:/Project/PL_REV1/CM4/Debug/…/Core/Inc/IO.h:108: first defined here
c:\st\stm32cubeide_1.8.0\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o:D:/Project/PL_REV1/CM4/Debug/…/Core/Inc/IO.h:109: multiple definition of P2_4'; ./Core/Src/IO.o:D:/Project/PL_REV1/CM4/Debug/../Core/Inc/IO.h:109: first defined here c:\st\stm32cubeide_1.8.0\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o:D:/Project/PL_REV1/CM4/Debug/../Core/Inc/IO.h:110: multiple definition of P2_5’; ./Core/Src/IO.o:D:/Project/PL_REV1/CM4/Debug/…/Core/Inc/IO.h:110: first defined here
c:\st\stm32cubeide_1.8.0\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o:D:/Project/PL_REV1/CM4/Debug/…/Core/Inc/IO.h:111: multiple definition of P2_6'; ./Core/Src/IO.o:D:/Project/PL_REV1/CM4/Debug/../Core/Inc/IO.h:111: first defined here c:\st\stm32cubeide_1.8.0\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o:D:/Project/PL_REV1/CM4/Debug/../Core/Inc/IO.h:112: multiple definition of P2_7’; ./Core/Src/IO.o:D:/Project/PL_REV1/CM4/Debug/…/Core/Inc/IO.h:112: first defined here
c:\st\stm32cubeide_1.8.0\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o:D:/Project/PL_REV1/CM4/Debug/…/Core/Inc/IO.h:148: multiple definition of INPUT_PULLDOWN'; ./Core/Src/IO.o:D:/Project/PL_REV1/CM4/Debug/../Core/Inc/IO.h:148: first defined here c:\st\stm32cubeide_1.8.0\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o:D:/Project/PL_REV1/CM4/Debug/../Core/Inc/IO.h:149: multiple definition of INPUT_PULLUP’; ./Core/Src/IO.o:D:/Project/PL_REV1/CM4/Debug/…/Core/Inc/IO.h:149: first defined here
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:68: PL_REV1_CM4.elf] Error 1
“make -j4 all” terminated with exit code 2. Build might be incomplete.

@MD18, this is a forum for Particle devices, not STM32 related topics.

This doesn’t seem to be the correct forum for you as it appears you are not using any Particle device.
However, these kinds of errors most likely come from the fact that your header file is not guarded against multiple inclusion.

You could either use

#pragma once

at the top of your header or wrap the contents of the header file into this

#ifndef __IO.H__
#define __IO.H__

// header contents here

#endif
2 Likes