Why I am getting undefined reference to sleep error?

12,361

Your code seems to come from Windows operating system. On Linux, the function Sleep does not exist (Sleep is a function from Windows API!). Try sleep (from <unistd.h>) instead. As alk said, keep in mind the arguments of Sleep and sleep are different:

  • Sleep takes a time in milliseconds;
  • sleep takes a time in seconds.

Likewise, the getch function and the cls shell command don't work with GNU/Linux.

Share:
12,361
rishiag
Author by

rishiag

Student at IIT Delhi

Updated on June 04, 2022

Comments

  • rishiag
    rishiag almost 2 years

    Code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    struct subscriber {
        char phonenumber[20];
        char name[50];
        float amount;
    } s;
    
    void addrecords();
    void listrecords();
    void modifyrecords();
    void deleterecords();
    void searchrecords();
    void payment();
    
    char get;
    
    int main()
    {
        int password;
        int phonenumber;
        char choice;
    
        system("cls");
    
        printf
        ("\n\n\n\n\n\n\n\n\n**********************************************************************");
        printf("\n\t\t---WELCOME TO THE TELECOM BILLING MANAGEMENT SYSTEM---");
        printf("\n\t\t****************************************************************");
    
        Sleep(2000);
    
        getch();
    
        system("cls");
    
        while (1) {
            system("cls");
            printf("\n enter\n A : for adding new records.\n L : for list of records");
            printf("\n M : for modifying records.\n P : for payment");
            printf("\n S : for searching records.");
            printf("\n D : for deleting records.\n E : for exit\n");
    
            choice = getche();
            choice = toupper(choice);
    
            switch (choice) {
            case 'P':
                payment();
            break;
    
            case 'A':
                addrecords();
                break;
    
            case 'L':
                listrecords();
                break;
    
            case 'M':
                modifyrecords();
                break;
    
            case 'S':
                searchrecords();
                break;
    
            case 'D':
                deleterecords();
                break;
    
            case 'E':
                system("cls");
                printf("\n\n\t\t\t\tTHANK YOU");
                printf("\n\n\n\n\n:\n\tFOR USING OUR SERVICE");
                Sleep(2000);
                exit(0);
                break;
    
            default:
                system("cls");
                printf("Incorrect Input");
                printf("\nAny key to continue");
                getch();
    
            }
    
        }
    
    }
    

    Error:

    proj.c:(.text+0x53): undefined reference to `Sleep'
    proj.c:(.text+0x5d): undefined reference to `getch'
    proj.c:(.text+0xbb): undefined reference to `getche'
    proj.c:(.text+0x17f): undefined reference to `Sleep'
    proj.c:(.text+0x1c1): undefined reference to `getch'
    /tmp/cc4UYi0H.o: In function `addrecords':
    proj.c:(.text+0x244): undefined reference to `getch'
    proj.c:(.text+0x340): undefined reference to `getche'
    /tmp/cc4UYi0H.o: In function `listrecords':
    proj.c:(.text+0x44c): undefined reference to `getch'
    /tmp/cc4UYi0H.o: In function `deleterecords':
    proj.c:(.text+0x5b2): undefined reference to `getch'
    proj.c:(.text+0x632): undefined reference to `getch'
    /tmp/cc4UYi0H.o: In function `searchrecords':
    proj.c:(.text+0x791): undefined reference to `getch'
    /tmp/cc4UYi0H.o: In function `payment':
    proj.c:(.text+0xb1f): undefined reference to `getch'
    collect2: ld returned 1 exit status
    

    I tried the solution given here ( Undefined reference to "sleep" but I did include <unistd.h> ) but it's still not working. I am using gcc on Ubuntu 12.04.