2016-04-16 13 views
-1

Ich habe ein sehr altes C-Programm und möchte nach Windows kompilieren. Also habe ich diese versuche zu tun:Schwierigkeiten beim Kompilieren eines einfachen c-Programms (gcc)

gcc -DNO_GLIBC=1 sakide.c -o sakide.exe 

und diese zurück:

\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0xa4): undefined reference to `ekiGetLibVersion' 
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0x6b6): undefined reference to `ekiGetLibVersion' 
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0x8ff): undefined reference to `ekiEncodeUrl' 
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0x954): undefined reference to `ekiDecodeUrl' 
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0x993): undefined reference to `ekiDecodeUrl' 
\AppData\Local\Temp\ccx7khiy.o:sakide.c:(.text+0xa62): undefined reference to `ekiGetKeyInfo' 
collect2.exe: error: ld returned 1 exit status 

Diese ekiGetLibVersion in einer .h-Datei ist:

INT EKIAPI ekiGetLibVersion(char *outBuffer, LPINT outBufferSize); 

und ich habe auch eine DLL-Namen es .

Ive nie mit C kompiliert alles obwohl

Antwort

1

Unter Windows können Sie nicht direkt mit der DLL verknüpfen, müssen Sie die Importbibliothek verknüpfen, Name .lib. Weitere Informationen finden Sie:

Auf dynamische Verknüpfung:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682592(v=vs.85).aspx

Auf implizite Verknüpfung:

https://msdn.microsoft.com/en-us/library/d14wsce5.aspx

+0

Ich habe versucht: „gcc -DNO_GLIBC = 1 - l sakiCrypt.lib sakide.c -o sakide.exe "immer noch keine Arbeit, aber sakiCrypt.lib ist da –

+1

In diesem Fall ist gcc's Syntax:' gcc -Dfoo sakide.c -lsakiCrypt -o sakide.exe' – fluter

+1

Was ist gcc's Ausgabe dieser Zeit? – fluter

1

Du Linkerfehler bekommen.

Sie müssen die Bibliothek (oder Objektdatei) verknüpfen, in der diese Funktionen definiert sind.

+0

Ich versuchte: "gcc -DNO_GLIBC = 1 -l sakiCrypt.lib sakide.c -o sakide.exe" immer noch keine Arbeit, aber sakiCrypt.lib gibt es –

0

undefiniert Referenz bedeutet in der Regel der Compiler keine richtige Erklärung dafür gesehen hat Variable. Haben Sie die Header-Datei (die diese Variable definiert) in Ihr C-Programm eingefügt?

#include "header_file.h" 
+0

ja, es ist bereits –

+0

Header selten Definitionen, in der Regel nur Deklarationen. Wenn der Header fehlte, sollte es Compilerfehler und keine Linkfehler geben. Und wenn es fehlte, würde es wahrscheinlich nicht ausreichen, die Linker-Probleme zu beheben. Das Problem besteht darin, die erforderliche Bibliothek nicht zu verknüpfen. –

Verwandte Themen