I have a simple C library that looks like this:
//mycLib.h
#ifndef _MY_C_LIB_h
#define _MY_C_LIB_h
typedef struct {char data1;
int data2;
} sampleStruct;
extern void mycLibInit(int importantParam);
extern void mycLibDoStuff(char anotherParam);
extern void sampleStruct mycLibGetStuff();
#endif
//mycLib.c
sampleStruct _sample;
void mycLibInit(int importantParam)
{
//init stuff!
//lets say _sample.data2 = importantParam
}
void mycLibDoStuff(char anotherParam)
{
//do stuff!
//lets say _sample.data1 = anotherParam
}
sampleStruct mycLibGetStuff()
{
//return stuff,
// lets say return _sample;
}
It works well when called from other test software. However, as part of another project, I have to include it in an Arduino project and compile it to work on that platform as well. Unfortunately, When I run my Arduino code that looks like this:
#include <mycLib.h>
void setup()
{
mycLibInit(0);
}
void loop()
{
}
I get the following compile error:
code.cpp.o: In function setup':
C:\Program Files (x86)\Arduino/code.ino:6: undefined reference to
mycLibInit(int)'
I have read following threads on Arduino website:
- http://www.arduino.cc/en/hacking/libraries
- http://playground.arduino.cc/Code/Library
- http://forum.arduino.cc/index.php?topic=37371.0
- http://arduino.cc/en/Hacking/BuildProcess
but in all those cases the external library was in form of a c++ class with a constructor call in the Arduino code.
Is there a way to tell Arduino IDE that "hey this function is part of this C library" or, should I re-write my functionality into c++ classes? Its not my favorite solution because the same c-Module is being used in other projects. (I know I probably can use preprocessor directives to have the code in the same place but it is not a pretty solution!)
.h
file, it should be in the project directory – Eugene Sh.