Hi everybody, i am trying to use the OpenCv's libraries with keil and i ve done this: 1. Added a Group called libs where i ve put al the .libs files 2. In the project configuration added all the necesary include paths ( and even more just in case ). libraries, sources, and .h paths
I have created a simple project, which compiles and works perfect without using Opencv libs
But when i try to use this libs i get this error:
Error: L6218E: Undefined symbol cvWaitKey (referred from main.o).
(CvWaitkey is defined in highgui.h which is included at the top of the main file)
It seems preety obvious that the compiler doesnt know where is defined cvWaitKey but i dont know what i am doing wrong because i ve ensured to include the highgui.h in the main file and added the include path in the project configuration.
Any idea?
Thanks!
here u have a print screen: www.mediafire.com/.../8c7v7kmakvi2f5mfg.jpg
The header file informs the compiler that there exists a function with that name. And tells the compiler what parameters the function takes and what data type it returns.
The next question here: have you told the linker what libraries to include, so the linker will be able to locate the actual processor instructions that implements that function?
Thanks for answering Per. Your are right, I havent told the linker what libraries to include. I suppose that can be done via project options - linker but i cant find the way.
Well if you dropped/added them to the project, then the linker should find them that way, presuming of course they are in a suitable/expected format.
Sometimes expects a helper function or two to be written by the user, in which case the function gets mentioned in the header files but there are no implementation.
But in that case that should be well documented.
I´ve wrote some dummy code for the function cvWaitKey and the code compiles perfect.
But i still can´t understand what is happening. The implementation code should be alocated in the .lib files and the libs are added to the project.
In the linker options i dont have any way to add the .lib path Maybe (as you said) once the libs are added to the project the linker should find the way to vinculate this libs to the project.
I really appreciate your help Per
Best regards
You shouldn't need to specify any library path because when you add a library to the project you specifically browse to the directory where the *.lib file is and points at the file.
And if you later browse the project, you can open the properties for the individual files and will then see a fully qualified file name for each source file or library file.
It's only for header files that you need to supply a path, since header files aren't part of the project - they are scanned for when the compiler processes the source files.
But might you have missed to add one library?
I have added all the necessary libraries but I am not sure if they are suitable for this ide. I mean this libs were created for visual studio 2005 and now i am tring to use them in keil.
Libraries are only possible to use if they has the correct file format, and are compiled for the correct processor and is compiled to use the same ABI (Application Binary Interface).
And if the library has hardware dependencies then it must also be compiled for the correct hardware platform.
That is a reason why lots of libraries are distributed in source form, so the user can rebuild the libraries using the correct compiler tool chain and after having configured the source code to match the used hardware platform.
Really thanks for your help, now i have to figure out what should i do to create my own libraries.
Why not just use the source files directly? Why use libraries at all?
I´ve been working with the source files and it´s not as easy as it seems, several functions depend of several files.
I realize that this is about 6 years too late for the OP and you all sound very well-educated, so forgive me if this is too basic a suggestion. I had this error and it turned out that not only do you have to do all of the proper "include"s, as in any other C-based program, but you also have to do a Keil include.
That is, mouse over to the "Project" window on the left-hand side, project -> target -> source group. Right click "source group" and click "add existing files." Filter by file type and add the missing .c file.
I was chugging merrily along thinking all was well, but now that it's included, I have 30 errors to debug.
This is nothing specifically to do with Keil - it is standard 'C' stuff:
http://c-faq.com/decl/decldef.html
www.avrfreaks.net/.../2545726
As already noted 6 years ago, header files generally just provide declarations - so what was missing was the source file (or pre-build binary) which provided the actual definition.