2016-06-06 14 views
2

Das Problem, das ich habe, ist der "undefinierte Verweis auf '_imp __...'" Fehler, der kommt, wenn ich mein Projekt erstellen. Ich benutze Windows 7, MinGW, Eclipse und .lib und .dll Datei, die ich nicht gemacht habe, aber ich habe direkt von der Firma genommen, die mir ihr Produkt verkauft hat.Nicht definiert Referenz auf Imp mit Mingw

Ich verbinde mit dem -l-Befehl die HRDL.lib-Datei und ich habe die PicoHRDL.dll im selben Verzeichnis. Die lib-Datei wird gefunden (bin mir sicher), aber der Fehler kommt auf. Ich habe den vollständigen Pfad mit dem Befehl -L eingefügt. Ich habe die Header-Datei mit den Deklarationen der Funktionen eingefügt, ich bekomme den undefinierten Verweis auf, aber der Fehler ist immer noch da.

Ich habe sowohl die Eclipse-Unterstützung als auch die Picotech-Unterstützung (die genannte Firma) kontaktiert, aber sie konnten das Problem bis jetzt nicht lokalisieren.

Dies sind die Befehle:

gcc -O0 -g -Wall -c -fmessage-length=0 -o ACD_SOURCE.o "..\\ACD_SOURCE.c" 
gcc "-LC:\\Users\\Falamana\\Desktop\\Eclipse\\ADC_project1\\Libraries" -shared -o libADC_24_DataLogger_App.exe ACD_SOURCE.o -lHRDL 

Dies sind die Fehler:

ACD_SOURCE.o: In Funktion `Haupt:

C: \ Benutzer Falamana \ Desktop \ \ Eclipse \ ADC_project1 \ Debug /../ ACD_SOURCE.c: 70: undefinierter Verweis auf `_imp__HRDLGetUnitInfo @ 16 '

C: \ Us ers \ Falamana \ Desktop \ eclipse \ ADC_project1 \ Debug /../ ACD_SOURCE.c: 99: undefined reference to `_imp__HRDLCloseUnit @ 4'

ACD_SOURCE.o: In Funktion` SelectUnit ':

C: 115: undefined reference to `_imp__HRDLGetUnitInfo @ 16'

C: \ Benutzer \ Falamana \ Desktop \ eclipse \ ADC_project1 \ Debug/\ Benutzer Falamana \ Desktop \ eclipse \ ADC_project1 \ Debug /../ ACD_SOURCE.c \ ../ACD_SOURCE.c:167: undefinierter Verweis auf `_imp__HRDLGetUnitInfo @ 16 '

+0

Kompilieren Sie einen 64-Bit-Build? Die fehlgeschlagenen Importe sehen wie Exporte aus einer 32-Bit-Binärdatei aus (mit '__stdcall' Namensdekoration). – IInspectable

+0

Danke für diesen Kommentar! es hat sehr geholfen! Also, ich baue mit 64-Bit-Bibliotheken aber Pico's Beispiel des Codes sagte, um eine 32-Bit-Anwendung zu bauen. Meine Frage ist: Um eine 32-Bit-App zu erstellen, brauche ich nur die 64-Bit-Bibliotheken oder brauche ich noch etwas anderes? Zum Beispiel, verschiedene Funktionen (ich benutze Pico-Funktion, wie Sie in der ursprünglichen Frage sehen können). danke nochmal! – Philemon

+0

Sie können Bissen nicht mischen. Eine 32-Bit-Anwendung benötigt 32-Bit-Bibliotheken und eine 64-Bit-Anwendung 64-Bit-Bibliotheken. Sie können eine 32-Bit-Anwendung nicht kompilieren und nicht mit einer 64-Bit-Bibliothek verknüpfen. – IInspectable

Antwort

-1

Beachten Sie, dass das Optionssymbol -L in Ihren Kompilierungsinformationen nicht im Angebot enthalten sein sollte. Das ist zu sagen, die

gcc "-LC:\Users\Falamana\Desktop\Eclipse\ADC_project1\Libraries" -shared -o libADC_24_DataLogger_App.exe ACD_SOURCE.o -lHRDL 

gcc -L"C:\Users\Falamana\Desktop\Eclipse\ADC_project1\Libraries" -shared -o libADC_24_DataLogger_App.exe ACD_SOURCE.o -lHRDL 

So überprüfen Sie bitte Ihre Konfiguration des lib sollte in welcher IDE Sie verwenden, util die gcc Linie Informationen zum Kompilieren normal aussieht (util -L steht direkt vor dem Anführungszeichen).

+0

Ich versuchte es zu ändern, aber ich cooulnt.Aber trotzdem, wenn ich das Projekt erstelle, scheinen die Befehle gut zu funktionieren, denn wenn ich "falschen" Namen der Bibliothek schreibe, kommt ein Fehler auf. Saing kann Bibliothek nicht finden, aber wenn ich es richtig eintipple kommt kein Fehler auf. Muss ich noch einen Weg finden, oder ist es in Ordnung? – Philemon