Skip to main content
2 of 4
added 5 characters in body
Dumbo
  • 109
  • 1
  • 5

Linker error when trying to use functions in separate header and source files

It is my first day of working with Arduino (it is a Due). I want to read from TMP102 through I2C. I wrote some code and it works just fine. But now I want to separate the TMP102 code from the main source code. But I get linker error:

sketch_jun15a.ino.cpp.o: In function setup': C:\Users\Saeid\Desktop\sketch_jun15a/sketch_jun15a.ino:62: undefined reference to tmp102_allocate(int)' collect2.exe: error: ld returned 1 exit status

My code is at the moment consist of 3 files:

tmp102.h

#ifndef TMP102_H
#define TMP102_H

//TP102 sensor struct
typedef struct TMP102 { 
  int   address;
  float celsius;
  float fahrenheit;    
} tmp102_t;

void tmp102_init_struct(tmp102_t * t, int address);

#endif

tmp102.c

#include "tmp102.h"

tmp102_t* tmp102_allocate(int address) {
  tmp102_t* t = (tmp102_t*) malloc(sizeof(tmp102_t));
  if(t) { //allocation success
    tmp102_init_struct(t, address);
    return t;
  } else {
    return 0; //null pointer
  }
}

void tmp102_init_struct(tmp102_t* t, int address) {
  t->address = address;
  t->celsius = 0.0;
  t->fahrenheit = 0.0;  
}

and here is the setup function of the sketch:

void setup(){

  //setup TP102 sensors
  tp_1 = tmp102_allocate(72); //error is here
  tempSensors[0] = tp_1;
  
  //rest of stuff...

}

I think there is no mistake in the code. There is also no option in the Arduino IDE so that I can meddle with the compiler/linker options.

All the files are inside the sketch folder. I created these files using the drop down button in the IDE...

Dumbo
  • 109
  • 1
  • 5