undefined reference to ...



  • Guten Tag,

    Habe ein relativ großes Projekt was kompeliert werden muss (Was ja klar ist).
    Allerdings bekomme ich folgende Fehlermeldung:

    C:\Users\a140734\AppData\Local\Temp\ccgoqSej.o:UmpTestClientSend.c:(.text+0x96): undefined reference to \_imp\_\_OpenSendOnlyMailbox@4' C:\\Users\\a140734\\AppData\\Local\\Temp\\ccgoqSej.o:UmpTestClientSend.c:(.text+0x10e): undefined reference to_imp__PutUMPMessage@16'
    C:\Users\a140734\AppData\Local\Temp\ccgoqSej.o:UmpTestClientSend.c:(.text+0x145): undefined reference to \_imp\_\_CloseMailbox@4' c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\\Users\\a140734\\AppData\\Local\\Temp\\ccgoqSej.o: bad reloc address 0x20 in section.eh_frame'
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
    collect2.exe: error: ld returned 1 exit status

    Benutze folgenden Compilestring:

    gcc -o test.exe UmpTestClientSend.c -I../include -std=c99 -D__NO_MINGW_LFS

    Hier einmal kurz das Programm:

    #include <stdio.h>
    #include <ump_NT/ump_NT.h>
    #include <sys/utime.h>
    
    int main(int argc, char* argv[])
    {
      Mailbox mbox;
      char Data[80];
      int nRet;
    
      printf("OpenSendOnlyMailbox: %s\n", argv[1]);
      mbox = OpenSendOnlyMailbox(argv[1]);
      if(mbox)
      {
        for (int i = 0; i < 250; i++)
        {
          sprintf(Data,"MailText %lu",i);
    
          printf("Send Mail: %s \n", Data);
          nRet = PutUMPMessage(mbox, argv[2], Data, strlen(Data)+1);
          printf("Ret: %lu\n", nRet);
        }
        CloseMailbox(mbox);
    
        printf("Done Ok");
        return 0;
      }
      printf("Error");
      return 10;
    }
    

    Verstehe die Meldung "_imp__OpenSendOnlyMailbox" ehrlich nicht so ganz. In dem ganzen Code, auch nicht in anderen Programmen oder Headerfiles, gibt es keine "_imp_" Referenz.

    z.B. OpenSendOnlyMailbox in ump_NT/ump_NT.h:

    UMP_API Mailbox _stdcall OpenSendOnlyMailbox(char *address)
    {
      return open_mailbox(address,1);
    }
    


  • Das _imp__ baut der Compiler für davor.

    Der Linker findet die Funktionen nicht.

    Diese stehen entweder in einem C-Quelltext oder in einer Bibliothek (Nein, eine Headerdatei (.h) ist nicht gemeint)

    Im ersten Fall musst du die auch noch compilieren
    und in jedem Fall zu deinem Programm dazulinken.


Anmelden zum Antworten