cancel
Showing results for 
Search instead for 
Did you mean: 

STM32CubeIDE not including library files correctly

ADP1114
Associate II

I am very new to STM32CubeIDE as I am switching from Keil to Cube. I included a library for an lcd and added the path of the library. The IDE does not recognize any functions defined in the library as I get the error "undefined reference to " function.

No error or warning is given at the "#include" for my header file within my code.

Am I missing a step when adding a library?

Is there a tutorial that would explain how to add such a library for this IDE?

edit:

I managed to successfully add a library for HX711 load cell amplifier. The library can be found here:

https://github.com/freakone/HX711

After including the header file of the library, I copied the c-file to the project folder. That seemed to be all that had to be done (it was also successful with the lcd library).

Unfortunately my issue isn't completely resolved.

I am also working with VL53L0X distance sensors which is dependent on ST's API that they have developed for it. The VL53L0X has a lot of headers and c files that needs to be referenced to. I tried only copying the header and c files included in my main, but that still gives the "undefined reference to" error.

I right clicked on the project folder and went to properties. Under C/C++ Build I went to settings and the tool settings. In tool settings under MCU G++ Linker/Libraries I added the paths to the directories.

When I have finished adding the directories I "apply and close" then clean my project and the build it. I then get the error "cannot find -l" next to my added path.

The path I provide starts in my C drive (C:/). I don't know whether that has an influence?

Maybe CubeIDE only searches within its current directory?

Thanks to anyone who helps (and even reads) with my question.

This discussion is locked. Please start a new topic to ask your question.
18 REPLIES 18

I guess same as : https://community.st.com/s/question/0D53W00000DJpGPSA1/file-added-and-path-added-but-still-get-no-such-file

Takes care about your include coloring ... Is such include setupeffective from Eclipse point of view already ? Please could you check if such line is leading to plain or grayed include like following sanpshot ... if grayed means Eclipse not able to reach

0693W000003BZiCQAW.jpg

I use STM32CubeIDE

0693W000003BfuEQAS.jpg

0693W000003BfoCQAS.jpg

0693W000003BfuOQAS.jpg

I see what ifdef __cplusplus extern "C" { #endif highlighted in gray , although I was creating a C ++ project. I think that the C ++ project is not created correctly, it is created as a C project. But how to fix it and why this happens I don't know....

Sounds ok but most probably your issue is project.cpp not project.h

Works for me. Looks at snapshot below. I've added my x2 files (project.h & project.cpp) plus project.h include within main.c. Obviously I'm using project.h prototypes within main.c.

Compile sucess. G++ is well invoked as expected.

0693W000003BihsQAC.jpg

all ok in my project.cpp. If i create new STM32 project , the code work true. But if I create project from .ioc file th bug.

0693W000003BjfNQAS.jpg

Is your project well set as C++ project ?. Many way to know.

1) All case select your project from project explorer view. Then mouse right click to get contextual menu

2) Either: you should be able to see a menu so called "Convert to ...". If convert to C++ means your project setting is C ....

3) Or: rely on properties to get build settings. Are C & C++ compiler options (includes for example) visible ?

If your project is not C++ sounds like a bug creating your project. Work around if required is obvious let's perform previous "Convert to C++"

Thank you! Problem solved. I took your advice and converted it to c ++ . After that, the project compiles without problems. Nevertheless, I am absolutely sure that I created a C ++ project. So it is an obvious bug CubeIDE. Despite the choice in the wizard C++ he creates a C project.

0693W000003BfoCQAS.jpg

Good to get compile sucess. Just having a try from .ioc project creation and C++ selection is providing me a C++ project.

In any case Convert feature sounds working fine so

QLin.1
Associate

Hi I have encountered ​the exact same problem as you did. And I have solved the problem.

I found this can be solved by including it's .c implementation, such as:

#include <stm32746g_discovery_lcd.h>
#include <stm32746g_discovery_lcd.c>

But this is not a correct way to solve it.

The correct way is: Besides adding the folder of the header file to Includes, you have to also add the folder of .c file to linker folder.

Here is my note: https://hackmd.io/@quency/rJzJXx2UP

Hope it's helping. 8)

DBurt.2
Associate

My solution [on change of USART from HAL to LL (or vice versa)] is to change the label of an unused pin in the .ioc file, save .ioc then generate code- the hal code should appear/compile now.