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 statusBenutze 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.