#include<string.h>
#include<stdio.h>
#define __16f877A
#include"pic/pic16f877a.h"
 
//-----------------------Varables----------------------------//
//char x;
int dat;
int val;
int value;
int value1;
float value2;
int i;
char str[20];
//-----------------------Functions---------------------------//

//-------Delay-----------//
void delay1();
void delay2();

//-------Lcd------------//
void lcdinit();
void sendcom(char comm);
void busy();

//-------ADC-----------//
void adcinit();
void chselect();
void senddata(int dat);
void adc();
void multiply();
void mask();
 
//---------------------main function-------------------------//
 
void main(void)
{
 PORTD=0x00;
 PORTC=0x00;
 TRISD=0x00;
 TRISC=0x00;
 delay1();
 lcdinit();
 adcinit();
 while(1)
 {
 chselect();
 delay2();
 }
 
}
//---------------------lcd init function-----------------------//
void lcdinit()
{
  sendcom(0x3F);  

  sendcom(0x3F);  
 
  sendcom(0x3F);  
 
  sendcom(0x3B); 
 
  sendcom(0x08); 
 
  sendcom(0x01);
 
  sendcom(0x02);  
 
  sendcom(0x0C);  
 
  sendcom(0x06);
 

//---------- Function to send command to lcd ----------------------//
void sendcom(char comm)
{
  TRISD=0x00;
  PORTC=0x04;                               // for command rs=0 rw=0 and en=1(00000100)
  PORTD=comm;
  PORTC=0x00;                               //(00000000)
  busy();
  return;
 }
 
//---------  Function To Check Whether The Lcd Is Busy -------------//
void busy()
{
  TRISD=0x80;
  PORTC =0x06;                             //00000110    for busy rs=0 rw=1 en=1
  _asm
  back2:
   BTFSC PORTD,7;
  goto back2;
  _endasm;
  PORTC = 0x00;    //0x02
  return;
}
//---------//---------  Function To Send Data To Lcd  ------------------------//
void senddata(int dat)
{
 
 TRISD=0x00;
 PORTC=0x05;                                //for data rs=1 rw=0 en=1 (00000101)
 PORTD=dat;
 PORTC=0x01;
 busy();
 return;
}
//--------------------------Delay1----------------------------------//
void delay1()
{
 TMR0=0xF0;
 RP0=1;
 PSA=0;
 PS1=0;
 T0CS=0;
 RP0=0;
 
 _asm
 back3:
  BTFSS INTCON,2;
 goto back3;
 _endasm;
  
 T0IF=0;
 RP0=1;
 T0CS=1;
 RP0=0;
 return;
}
//------------------------------Delay2---------------------//
void delay2()
{
  TMR1ON=1;
  TMR1H=0x09;
  TMR1L=0x00;     
  T1CKPS0=1;
  T1CKPS1=1;
  TMR1CS=0;
 
  _asm
  back4:
   BTFSS PIR1,0;
  goto back4;
  _endasm;
 
  TMR1IF=0;
  TMR1ON=0;
  return;
}


//-------------------------Init A/D convertion-------------------//
void adcinit()
{
  ADCON1=0x84;
  ADON=1;
  ADCS1=1;
  ADCS0=0;
  return;
}
//------------------------Channel select------------------------//
void chselect()
{
 
  sendcom(0x80);
  senddata(0x43);
  senddata(0x48);
  senddata(0x30);
  senddata(0x3A);
  CHS2=0;
  CHS1=0;
  CHS0=0;
  adc();
  delay1();
  sendcom(0xC0);
  senddata(0x43);
  senddata(0x48);
  senddata(0x31);
  senddata(0x3A); 
  CHS2=0;
  CHS1=0;
  CHS0=1;
  adc();
  delay1();
}
//------------------------Reading Data--------------------------//
void adc()
{
//ADCON0=0xA1;
  delay1();
  GO=1;
  _asm
  BACK1:
   BTFSC ADCON0,2;
  goto BACK1;
  _endasm;
  ADIF=0;
  mask();
  multiply();
  return;
}
//----------------------Convertion Of the Data---------------------//
void mask()
{
  value= ADRESH; //Getting the first digit
  value=value&0x03;
  value1=value;
 
 
  value=ADRESL;   //Getting the second digit
  value=value&0xF0;//swap is not included
  value1=value1*0x100+value;

  value=ADRESL;   //Getting the second digit
  value=value&0x0F;
  value1=value1+value;
  return;
}
void multiply()
{
// value1=0x00A;
 value2=value1*0.00488758;

//-------First digit--------------------//
 sprintf(str,"%f",value2);

 for(i=0;i<strlen(str);i++)
   {
    val=str[i];
    senddata(val);
    }
 return;
}

When i compiled the above program using sdcc
sdcc --debug -mpic14 -p16f877 progname.c
or
sdcc -mpic14 -p16f877 -I/usr/local/share/sdcc/include -L /usr/local/share/sdcc/lib/ progname.c
or
sdcc -mpic14 -p16f877 progname.c

I get the following error in all the above case.

message: using default linker script "/usr/share/gputils/lkr/16f877.lkr"
error: missing definition for symbol "_strlen", required by "modiadc2lcd.o"
error: missing definition for symbol "_sprintf", required by "modiadc2lcd.o"
 
and the hex file is not generated asm and other codes are generated

plz help me to solve this.