Zugriff auf API mit dev c++

TiHm

Grünschnabel
Hallo zusammen,

bin stark eingerostet was das Programmieren angeht und mit APIs hatte noch nie was zu tun.

Ich möchte über eine API (Libad4) auf ein Messgerät zugreifen. Dafür habe ich einen Treiber und die Schnittstelle installiert.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include "libad.h"
int32_t adh;

int main()
{
adh = ad_open ("lanbase:mad:238");
if (adh == -1)
{
printf("Error\n");
exit(1);
}
ad_close(adh);
}

In der Header-File libad.h sind Verweise zu weiteren header-files der Schnittstelle. Neben dieser Header-File gibt es auch noch eine .dll und .lib-File. Bei den Projektoptionen unter dev c++ habe ich jeweils den Pfad zur Library und zu den Header-Files angegeben. Trotzdem bekomme ich immer den Fehler:

C:\Users\tharbarth\Documents\Untitled4.o Untitled4.cpp:(.text+0x16): undefined reference to `ad_open'
C:\Users\tharbarth\Documents\collect2.exe [Error] ld returned 1 exit Status

Also ein Verlinkungs-Problem.

Wäre dankbar für irgendwelche Hinweise :)

Liebe Grüße
 
Hallo TiHm und willkommen bei tutorials.de!

Bitte in Zukunft Code-Tags verwenden, danke ;)
(code=CPP)dein C++ Code (/code) mit [] statt ()

Zu deinem Problem: Dev-Cpp kompiliert (idr) mit GCC. GCC benötigt .a und nicht .lib Dateien. Die sind normalerweise nicht direkt kompatibel.
Lösung: Entweder du hast noch eine .a Datei (dann versuch die), oder du verwendest Visual Studio (wäre nicht meine bevorzugte Wahl, aber kann jeder für sich entscheiden) oder du musst die .lib Datei in eine .a Datei umwandeln (geht in der Regel problemlos, aber nach meinen Erfahrungen nicht immer).

Vielleicht können dir andere auch noch weiter helfen. Wenn du die .lib konvertieren willst, kann ich ggf. auch noch weiter helfen.


Viele Grüße
K.


#edit: ich sehe gerade, dass du schreibst, dass du den Library Pfad angegeben hast. Du musst stattdessen in den Linker Options die konkrete Library angeben. Vielleicht behebt das auch schon dein Problem.



#edit2: Hier ist ein Konverterprogramm, welches bei mir schon öfters funktioniert hat: https://code.google.com/p/lib2a/
 
Zuletzt bearbeitet:
Hallo und vielen Dank für die schnelle Hilfe.

Hängen .lib und .dll -Datei in irgendeinerweise zusammen? Hab dies jedenfalls in .a umgewandelt.

Ich hab die Bibliotheken/Header-Files nun bei Projektoptionen sowie bei Werkzeuge -> Compiler eingefügt.

Jetzt kommt folgender Fehler

c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe lib/libad4.lib(libad4.dll): Recognised but unhandled machine type (0x14c) in Import Library Format archive

Während dem Kompilieren schmiert Id.exe ab!
 
Hallo

Dev-Cpp kompiliert (idr) mit GCC
MinGW != GCC. Minimalist GNU for Windows nutzt entsprechend auch .lib und nicht nur .a. Siehe http://www.mingw.org/wiki/specify_the_libraries_for_the_linker_to_use
Daher auch
c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe lib/libad4.lib(libad4.dll): Recognised but unhandled machine type (0x14c) in Import Library Format archive
Lass die Konvertierung weg. Falls das noch immer nicht funktioniert, hast du a) die falsche oder b) gar keine Bibliothek angegeben.

Ansonsten: Ich habe auch mit DevC++ begonnen. Und ja, es ist wieder in Entwicklung. Aber tue dir einen Gefallen: Programmiere unter Windows mit Visual Studio. Das ist viel bequemer und VS ist IMHO der bessere Compiler.


Gruss
cwriter
 
Wäre dankbar wenn mir jemand erklären könnte wo genau ich diese Erweiterungen im Compiler Kommando Fenster machen muss.. finds ein wenig verwirrend geschrieben^^
 
Einmal bei..

Werkzeuge -> Compiler -> Verzeichnisse -> (hier Pfadangabe zu Bibliotheksordner und Includes)

und bei Projekt -> Projektoptionen -> Parameter -> im Feld Linker "lib/libad4.a" und im Reiter Verzeichnisse nochmal den Pfad zum Verzeichnis für Biblio.. und Includes
Zusätzliche Kommandozeilen Optionen sind bei C- / C++-Compiler leer.
 

Neue Beiträge

Zurück