… undefined reference to … collect2: ld returned 1 exit status

38,170

C (and C++) is case sensitive. Your function is called heapSort. Your HeapClient.c is apparently calling heapsort, so the linker complains that it can't find a heapsort function anywhere. Fix that typo and it should link.

Share:
38,170
user38669
Author by

user38669

Updated on August 28, 2022

Comments

  • user38669
    user38669 over 1 year

    I'm having some errors when compiling and I can't figure out why...is my heapsort.h supposed to have an exported type?

    heapsort.c

    #include <stdio.h>        // standard libraries already included in "list.h"
    #include <stdlib.h>
    
    #include "heap.h"
    #include "heapsort.h"
    
    void heapSort(int* keys, int numKeys){
       heapHndl H = NULL;
       H = buildHeap(numKeys, keys, numKeys);
       for (int i = 1; i < numKeys; i++){
          keys[i] = maxValue(H);
          deleteMax(H);
       }
       freeHeap(&H);
    }
    

    heapsort.h:

    #ifndef _HEAPSORT_H_INCLUDE_
    #define _HEAPSORT_H_INCLUDE_
    
    #include <stdio.h>
    #include <stdlib.h>
    
    void heapSort(int* keys, int numKeys);
    
    #endif
    

    when I go to compile with my client program I get this error upon compilation:

    HeapClient.o: In function `main':
    HeapClient.c:(.text.startup+0x1a3): undefined reference to `heapsort'"
    
    • kec
      kec almost 10 years
      BTW, if you wrote heapsort.h: (1) Don't use _ at the beginning, and (2) don't include those two includes.