Forum: PC-Programmierung FTDI Treiber und MingW Compiler


von hmann (Gast)


Lesenswert?

Hi!

Ich habe folgendes Problem mit dem FTDI Treiber:

Ich habe bis jetzt nur die Headerdatei des ftd2xx Treibers in mein
Programm eingebunden (das nichts macht ausser diese Datei einzubinden)
und bekomme beim Compilieren nur Fehler. Ich bin C++ Anfänger und kann
damit nicht allzuviel anfangen.
Vieleicht kann mir hier ja jemand helfen.

Danke
 hmann

Fehler:

g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/include/c++/3.3.1"
-I"C:/Dev-Cpp/include/c++/3.3.1/mingw32"
-I"C:/Dev-Cpp/include/c++/3.3.1/backward"
-I"C:/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include"
-I"C:/Dev-Cpp/include"

In file included from main.cpp:3:
ftd2xx.h:52: error: syntax error before `;' token
ftd2xx.h:53: error: syntax error before `;' token
ftd2xx.h:167: error: `DWORD' was not declared in this scope
ftd2xx.h:167: error: `DWORD' was not declared in this scope
ftd2xx.h:167: error: typedef `PFT_EVENT_HANDLER' is initialized (use
_typeof_
   instead)
ftd2xx.h:183: error: syntax error before `;' token
ftd2xx.h:201: error: syntax error before `FT_Open'

ftd2xx.h:207: error: syntax error before `FT_OpenEx'
ftd2xx.h:214: error: syntax error before `FT_ListDevices'
ftd2xx.h:221: error: syntax error before `FT_Close'
ftd2xx.h:226: error: syntax error before `FT_Read'
ftd2xx.h:234: error: syntax error before `FT_Write'
ftd2xx.h:242: error: syntax error before `FT_IoCtl'
ftd2xx.h:254: error: syntax error before `FT_SetBaudRate'
ftd2xx.h:260: error: syntax error before `FT_SetDivisor'
ftd2xx.h:266: error: syntax error before `FT_SetDataCharacteristics'
ftd2xx.h:274: error: syntax error before `FT_SetFlowControl'
ftd2xx.h:282: error: syntax error before `FT_ResetDevice'
ftd2xx.h:287: error: syntax error before `FT_SetDtr'
ftd2xx.h:292: error: syntax error before `FT_ClrDtr'
ftd2xx.h:297: error: syntax error before `FT_SetRts'
ftd2xx.h:302: error: syntax error before `FT_ClrRts'

ftd2xx.h:307: error: syntax error before `FT_GetModemStatus'
ftd2xx.h:313: error: syntax error before `FT_SetChars'
ftd2xx.h:322: error: syntax error before `FT_Purge'
ftd2xx.h:328: error: syntax error before `FT_SetTimeouts'
ftd2xx.h:335: error: syntax error before `FT_GetQueueStatus'
ftd2xx.h:341: error: syntax error before `FT_SetEventNotification'
ftd2xx.h:348: error: syntax error before `FT_GetStatus'
ftd2xx.h:356: error: syntax error before `FT_SetBreakOn'
ftd2xx.h:361: error: syntax error before `FT_SetBreakOff'
ftd2xx.h:366: error: syntax error before `FT_SetWaitMask'
ftd2xx.h:372: error: syntax error before `FT_WaitOnMask'
ftd2xx.h:378: error: syntax error before `FT_GetEventStatus'
ftd2xx.h:384: error: syntax error before `FT_ReadEE'
ftd2xx.h:391: error: syntax error before `FT_WriteEE'
ftd2xx.h:398: error: syntax error before `FT_EraseEE'
ftd2xx.h:407: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:408: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:409: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:413: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:414: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:419: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:420: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:421: error: 'WORD' is used as a type, but is not defined as
a type.

ftd2xx.h:422: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:426: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:427: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:428: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:429: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:430: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:431: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:432: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:436: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:437: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:438: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:439: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:440: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:441: error: 'UCHAR' is used as a type, but is not defined as
a type.

ftd2xx.h:442: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:443: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:444: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:445: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:446: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:447: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:448: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:449: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:450: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:451: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:452: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:453: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:454: error: 'UCHAR' is used as a type, but is not defined as
a type.
ftd2xx.h:458: error: syntax error before `FT_EE_Program'
ftd2xx.h:464: error: syntax error before `FT_EE_ProgramEx'
ftd2xx.h:474: error: syntax error before `FT_EE_Read'
ftd2xx.h:480: error: syntax error before `FT_EE_ReadEx'
ftd2xx.h:490: error: syntax error before `FT_EE_UASize'
ftd2xx.h:496: error: syntax error before `FT_EE_UAWrite'
ftd2xx.h:503: error: syntax error before `FT_EE_UARead'
ftd2xx.h:511: error: syntax error before `FT_SetLatencyTimer'
ftd2xx.h:517: error: syntax error before `FT_GetLatencyTimer'
ftd2xx.h:523: error: syntax error before `FT_SetBitMode'
ftd2xx.h:530: error: syntax error before `FT_GetBitMode'
ftd2xx.h:536: error: syntax error before `FT_SetUSBParameters'
ftd2xx.h:543: error: syntax error before `FT_GetDeviceInfo'
ftd2xx.h:553: error: syntax error before `FT_StopInTask'
ftd2xx.h:558: error: syntax error before `FT_RestartInTask'
ftd2xx.h:563: error: syntax error before `FT_SetResetPipeRetryCount'

ftd2xx.h:569: error: syntax error before `FT_ResetPort'
ftd2xx.h:579: error: syntax error before `FT_W32_CreateFile'
ftd2xx.h:590: error: syntax error before `FT_W32_CloseHandle'
ftd2xx.h:595: error: syntax error before `FT_W32_ReadFile'
ftd2xx.h:604: error: syntax error before `FT_W32_WriteFile'
ftd2xx.h:613: error: syntax error before `FT_W32_GetLastError'
ftd2xx.h:618: error: syntax error before `FT_W32_GetOverlappedResult'
ftd2xx.h:626: error: syntax error before `FT_W32_CancelIo'
ftd2xx.h:635: error: syntax error before `:' token
ftd2xx.h:636: error: syntax error before `:' token
ftd2xx.h:637: error: syntax error before `:' token
ftd2xx.h:638: error: syntax error before `:' token
ftd2xx.h:639: error: syntax error before `:' token
ftd2xx.h:640: error: syntax error before `:' token
ftd2xx.h:641: error: syntax error before `:' token
ftd2xx.h:642: error: syntax error before `:' token
ftd2xx.h:643: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:644: error: 'DWORD' is used as a type, but is not defined as
a type.

ftd2xx.h:648: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:649: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:650: error: syntax error before `:' token
ftd2xx.h:651: error: syntax error before `:' token
ftd2xx.h:652: error: syntax error before `:' token
ftd2xx.h:653: error: syntax error before `:' token
ftd2xx.h:654: error: syntax error before `:' token
ftd2xx.h:655: error: syntax error before `:' token
ftd2xx.h:656: error: syntax error before `:' token
ftd2xx.h:657: error: syntax error before `:' token
ftd2xx.h:658: error: syntax error before `:' token
ftd2xx.h:659: error: syntax error before `:' token
ftd2xx.h:660: error: syntax error before `:' token
ftd2xx.h:661: error: syntax error before `:' token
ftd2xx.h:662: error: syntax error before `:' token
ftd2xx.h:663: error: syntax error before `:' token
ftd2xx.h:664: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:665: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:666: error: 'WORD' is used as a type, but is not defined as
a type.

ftd2xx.h:667: error: 'BYTE' is used as a type, but is not defined as
a type.
ftd2xx.h:668: error: 'BYTE' is used as a type, but is not defined as
a type.
ftd2xx.h:669: error: 'BYTE' is used as a type, but is not defined as
a type.
ftd2xx.h:675: error: 'WORD' is used as a type, but is not defined as
a type.
ftd2xx.h:679: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:680: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:681: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:682: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:683: error: 'DWORD' is used as a type, but is not defined as
a type.
ftd2xx.h:688: error: syntax error before `FT_W32_ClearCommBreak'
ftd2xx.h:693: error: syntax error before `FT_W32_ClearCommError'
ftd2xx.h:700: error: syntax error before `FT_W32_EscapeCommFunction'
ftd2xx.h:706: error: syntax error before `FT_W32_GetCommModemStatus'
ftd2xx.h:712: error: syntax error before `FT_W32_GetCommState'
ftd2xx.h:718: error: syntax error before `FT_W32_GetCommTimeouts'
ftd2xx.h:724: error: syntax error before `FT_W32_PurgeComm'
ftd2xx.h:730: error: syntax error before `FT_W32_SetCommBreak'
ftd2xx.h:735: error: syntax error before `FT_W32_SetCommMask'
ftd2xx.h:741: error: syntax error before `FT_W32_SetCommState'
ftd2xx.h:747: error: syntax error before `FT_W32_SetCommTimeouts'
ftd2xx.h:753: error: syntax error before `FT_W32_SetupComm'
ftd2xx.h:760: error: syntax error before `FT_W32_WaitCommEvent'

make.exe: *** [main.o] Error 1

Ausführung beendet

von Rufus T. Firefly (Gast)


Lesenswert?

Statt hier sämtliche Fehler zu posten, solltest Du Dir nur die ersten
paar davon näher ansehen - der Rest sind aller Wahrscheinlichkeit nach
Folgefehler.

  In file included from main.cpp:3:
  ftd2xx.h:52: error: syntax error before `;' token
  ftd2xx.h:53: error: syntax error before `;' token

Kann ich nichts zu sagen, was steht denn da?

  ftd2xx.h:167: error: `DWORD' was not declared in this scope
  ftd2xx.h:167: error: `DWORD' was not declared in this scope

Könnte es sein, daß Du vergessen hast, windows.h vor  ftd2xx.h
einzubinden?

von hmann (Gast)


Lesenswert?

Ich bin leider C++ Anfänger aber muss halt was mit dem FTDI Treiber
machen.

Der Tip mit der windows.h war die Lösung!
Vielen Dank!!

Ciao
  hmann

von Thomas Faust (Gast)


Lesenswert?

Ich schreib das jetzt mal hier rein, und nicht in einen neuen Thread, da
es zum Thema (der Überschrift) passt.
Ich hab mir gestern mal dev-c++ geladen, den d2xx-Treiber von FTDI und
versuche nun die beiden zusammen zu benützen (in C++).
Mein Testprogramm (aus dem HelloWorld-Beispiel von dev-c++ und etwas
Beispielcode aus der Dokumentation der dll zusammengeschustert):
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <ftd2xx.h>

int main()
{
  cout << "Hello World!" << endl;
  FT_HANDLE ftHandle;
  FT_STATUS ftStatus;
  ftStatus = FT_Open(0,&ftHandle);
  if (ftStatus == FT_OK) {
     cout << "ok" << endl;
  }
  else {
       cout << "fehler" << endl;
  }
  cout << "Press ENTER to continue.." << endl;
  getchar ();
  FT_Close(ftHandle);
  return 0;
}

Das lässt sich auch ohne Proleme kompilieren, jedoch schimpft der
Linker:
d:\sources\cpp\helloworld\untitled1.o: In function `main':
//d/sources/cpp/helloworld/untitled1.cpp:12: undefined reference to
`_imp__FT_Open@8'
//d/sources/cpp/helloworld/untitled1.cpp:21: undefined reference to
`_imp__FT_Close@4'

Ich habe mich ein wenig im Internet umgeschaut, und mit einer Anleitung
(http://www.emmestech.com/software/cygwin/pexports-0.43/moron1.html) mir
aus der ftd2xx.dll eine ftd2xx.def und libftd2xx.a erstellt (beide im
dev-c++\lib-Verzeichniss).
Auf der oben genannten Seite steht außerdem, man müse manchmal so ein
ein @xx hinten an die Funktionsnamen in der .def-Datei anfügen, damit
gcc sie sieht, Ich hab das mal getestet (also FT_open durch FT_open@8
in der .def ersetzt, FT_Close entsprechend). Das Programm lässt sich
dann zwar kompilieren, jedoch erhalte ich beim Ausführen die
Fehlermeldung, dass der Prozedureinsprungpunkt  FT_Close@4 nicht
gefunden werden konnte. Wenn ich das Programm debugge, gibt der gdb
nach der Eingabe von run Folgendes aus:
run
Starting program: \Sources\cpp\HELLOW~1/PROJEC~1.EXE
77f40000:ntdll.dllntdll.dll: No such file or directory.
77e40000:C:/WINDOWS/system32/kernel32.dll
10000000:D:/ft245/d2xx/ftd2xx.dll
76620000:C:/WINDOWS/System32/SETUPAPI.dll
77be0000:C:/WINDOWS/system32/msvcrt.dll
77da0000:C:/WINDOWS/system32/ADVAPI32.dll
78000000:C:/WINDOWS/system32/RPCRT4.dll
7e180000:C:/WINDOWS/system32/GDI32.dll
77d10000:C:/WINDOWS/system32/USER32.dll
gdb: unknown target exception 0xc0000139 at 0x77f866bc

Program received signal SIGSEGV, Segmentation fault.
0x144f8 in ?? ()

Es scheint also nciht daran zu liegen, dass er die .dll nicht findet.

Hat schonmal jemand erfolgreich den d2xx-Treiber unter Windows mit gcc
zum laufen bekommen und kann mir sagen wie es geht?

von Heinz (Gast)


Lesenswert?

Du brauchst zum linken nicht in den Projektdateien rumpfuschen, sondern
kannst deine *.a Datei einfach im Menü
Projekt/Optionen/Parameter/Linker einbinden.
Alternative kannst du *.dll Dateien auch direkt mit
LoadLibrary(dllname) einbinden.

von Rufus T. Firefly (Gast)


Lesenswert?

Daß sich das ganze problemlos übersetzen lässt, ist doch schon mal ein
Schritt vorwärts.
Die Linkerfehlermeldung ist naheliegend; in der von Dir eingebundenen
Headerdatei werden Funktionsnamen definiert, die Dein Code aufruft, für
die aber kein Code vorhanden ist.
Daß der in einer DLL vorhanden ist, weiß der Linker nicht; um mit DLLs
so umgehen zu können, wurde das Konzept der Importlibrary eingeführt.
Das ist eine Library-Datei (*.lib), die statisch zum Programm gelinkt
werden kann und für jede der von der DLL exportierten Funktionen einen
Funktionsstummel enthält, der den Linker befriedigt und zur Laufzeit
die entsprechende Funktion in der DLL aufruft.

Du musst also zu Deinem Programm die Importlibrary linken, damit die
vom Linker bemängelten unbekannten Symbole aufgelöst werden können.

Alternativ musst Du den von Heinz vorgeschlagenen Weg verfolgen und die
DLL selbst mit LoadLibrary laden und mit GetProcAddress die
Funktionspointer der von Dir aufzurufenden Funktionen bestimmen. Das
hat zwar den Vorteil, daß Dein Programm auch dann die Chance bekommt,
irgendetwas sinnvolles zu tun, wenn die DLL nicht vorhanden ist (beim
Verwenden der Importlibrary motzt der OS-eigene Programmlader mit einer
Fehlermeldung "DLL nicht gefunden"), ist aber recht fehlerträchtig und
nicht leicht zu handhaben.

Irgendwelche .def-Dateien oder gar Assemblerdateien musst Du nicht
verwenden.

von Thomas Faust (Gast)


Lesenswert?

>Irgendwelche .def-Dateien oder gar Assemblerdateien musst Du nicht
>verwenden.

Das wäre ja erfreulich, aber wenn ich entweder die mitgelieferte .lib
benutze, oder mir mit dlltool aus der dll eine eigene erzeuge, bleibt
das Problem bestehen.
Ich fürchte fast, dass es eher daran liegt, dass der gcc umbedingt
diese @x an den Funktonen dran sehen möchte,d a es sich ja auch mit
eienr händisch modifizierten .def-Datei linken ließ, jedoch natürlich
nicht erfolgreich ausführen.

von Matthias (Gast)


Lesenswert?

Hi

definiert dein Compiler denn das Symbol __cplusplus?

Übersetz das Programm mal mit -E als Compileroption (dann läuft nur der
Präprozessor) und schau ob um die Funktionsprototypen in der FTD2XX.dll
ein extern "C" {} Block drum rum ist. Wenn dem nicht so ist definier
mal das Symbol __cplusplus an der Kommandozeile oder vor dem #include
"FTD2XX.dll".

C++ benötigt diesen Block um C Funktionen um zu wissen das es eine C
Funktion aufrufen soll.

Matthias

von Thomas Faust (Gast)


Lesenswert?

Wenn du sowas hier meinst:
extern "C" {

__attribute__(( dllimport ))
FT_STATUS __attribute__((_stdcall_))   FT_Open(
  int deviceNumber,
  FT_HANDLE *pHandle
  );

__attribute__(( dllimport ))
FT_STATUS __attribute__((_stdcall_))   FT_OpenEx(
    PVOID pArg1,
    DWORD Flags,
    FT_HANDLE *pHandle
    );
.....

Dann scheint er das richtig zu machen, aber sofort wenn ich das -E
weglasse hab ich meinen Fehler wieder. Ich hab g++ jetzt mal von der
Kommandozeile aus selbst aufgerufen, da sich dev-c++ bei dem
compilerparameter -E beim Linken aufgehängt hat (was ja dann auch nicht
wirklich Sinn macht)

von Matthias (Gast)


Lesenswert?

Hi

bei -E kann kein Fehler kommen da da nur der Präprozessor läuft. Aber
wenn daß extern "C" {} um die Prototypen aus der FTD2XX.dll drin ist
weiß ich auch nicht weiter. Mit dem GCC hab ich unter Windows noch nie
eine DLL eingebunden. Probier doch mal den M$ Compiler. Der kostet auch
nichts und sollte auf seiner Heimatplatform besser geeignet sein.

Matthias

von Rufus T. Firefly (Gast)


Lesenswert?

Du benutzt die Importlibrary und der Linker nörgelt trotzdem? Dann
solltest Du Dir mal ansehen, wie die Symbole in der Importlibrary
benannt sind, und deren Namen mit den vom Compiler generierten und
bemängelten vergleichen.

Ich habe mal das Dumpbin meines Compilers (VC6) auf die Library
angesetzt und mir die Namen der darin definierten Symbole angesehen:

C:\>dumpbin FTD2XX.lib /exports
Microsoft (R) COFF Binary File Dumper Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

Dump of file FTD2XX.lib

File Type: LIBRARY
     Exports
       ordinal    name

             2    _FT_Close@4
            11    _FT_ClrDtr@4
            13    _FT_ClrRts@4
            37    _FT_EE_Program@8
            67    _FT_EE_ProgramEx@24
            38    _FT_EE_Read@8
            68    _FT_EE_ReadEx@24
            39    _FT_EE_UARead@16
            40    _FT_EE_UASize@8


  etc.pp.

Vergleiche ich das mit der von Dir geposteten Fehlermeldung des
Linkers

d:\sources\cpp\helloworld\untitled1.o: In function `main':
//d/sources/cpp/helloworld/untitled1.cpp:12: undefined reference to
`_imp__FT_Open@8'

so wird schnell klar, wo das Problem liegt. Dein Compiler setzt das
Präfix imp vor den Funktionsnamen, das sollte er sein lassen.

von Thomas Faust (Gast)


Lesenswert?

So, Problem gelöst, hier findet man die Lösung:
http://www.mingw.org/mingwfaq.shtml#faq-msvcdll
Das ganze liegt im Prinzip daran, dass die tollen universellen
dll-Dateien mal wieder ein totales chaos sind, jeder Compiler etc.
kocht sein eigenes Süppchen mit _ vornedran, @whatever hintendran, ...
Aber es gibt ein Tool um die .lib-Datei gcc-gerecht zu machen, d. h.
bei mir funktioniert es jetzt.

von jP (Gast)


Lesenswert?

Hallo zusammen,

ich habe das gleiche Problem, allerdings finde ich die Lösung auf dem 
Link nicht. (Der Beitrag hier ist auch schon etwas älter..)

Ich bin schon eine Weile mit dlltool etc unterwegs ohne die Sache zu 
kopieren.

Hat hier jemand eine Anleitung?

von Christof Petig (Gast)


Lesenswert?

Hallo jP,

Für mich hat es so funktioniert:
pexports für das .def File aus der dll.
Dann die korrekten @4/8 etc. nachtragen (von Hand, der Linker nennt die 
Zahlen).
Dann mit dlltool -d x.def -l x.dll.a -k (!) import library erzeugen und 
verwenden.

   Christof

von jP (Gast)


Lesenswert?

Danke für die Hilfe. Ich doktore da seitdem immer mal wieder dran rum 
und war immer der überzeugung, dass ich da irgendwann noch von alleine 
drauf komme...

Aber jetzt frag ich doch noch: Funktioniert allerdings immernoch nicht. 
Hier im Forum gibt es das Projekt "USB_IO_Expander". Das ist ein Projekt 
für Qt (MinGW) mit umgestellten FTD2XX.a, auch mit der .h und .a kann 
ich nicht kompilieren.

Ich vermute es liegt wie oben beschrieben an dem Präfix "_imp". Nur wie 
sag ich dem Compiler, dass er es weglassen soll?

von Madman (Gast)


Lesenswert?

Evtl. kann ich für alle Googler, die hier drauf stoßen noch mal helfen:

Ich habe es so gelöst, dass ich nicht die AMD64 version der DLLs 
genommen haben sondern die i368 Version.

Beide gibt es in dem Zipfile mit und bei funzt es nun.

MfG
Madman
irrenhausag.com

von Oliver B. (irq)


Angehängte Dateien:

Lesenswert?

Bin auch per Suchmaschine auf diesen Beitrag gestoßen. Fürs Protokoll, 
ich habe es so gelöst:

 - Beim FTDI-Treiber wird im Verzeichnis i386 die Importlibrary 
ftd2xx.lib mitgeliefert
 - Im Projekt den Header ftd2xx.h einbinden und gegen obige .lib linken
 - Zum Ausführen die ftd2xx.dll in das Verzeichnis mit der erzeugten 
.exe stecken

Ein Minimalprojekt für CodeBlocks + MinGW habe ich angefügt. Die DLL 
bitte selbst noch reinkopieren und ggf Pfade anpassen (Project->Build 
Options).

Viele Grüße, Oliver.

von Rawe (Gast)


Lesenswert?

hallo,

also ich bin mittlerweile echt verzweifelt^^

Ich bekomme ständig den Fehler

... undefined reference to "__imp__FT_ListDevices@12"

Ich habe schon alle vorschläge die hier gebracht wurden ausprobiert 
jedoch ohne zu einer lösung zu gelangen.

-ich verwende die Dateien aus dem i386 Ordner
-ich habe auch schon entsprechende .def bzw .a Dateien erzeugt

Woran könnts noch liegen..?

mfg

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du linkst nicht mit der Importlibrary.

von Rawe (Gast)


Lesenswert?

... aha, und wie linke ich mit der Importlibrary?^^

sry ich glaub ich steh grad ein bissl neben mir; plag mich grad seit 6 
stunden mit diesem linkfehler rum :P

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Indem Du Deinem Linker mitteilst, daß er das tun soll. Dazu muss die 
Library natürlich im richtigen, also zu Deinem Linker passenden Format 
vorliegen.

von Rawe (Gast)


Lesenswert?

OMG

ich hab meinen fehler gefunden...

und zwar kommts anscheinend drauf an dass beim g++ aufruf "-lftd2xx" zum 
schluss stehen muss und nicht irgendwo in der mitte...

tya, muss man auch mal draufkommen :P

von aaw (Gast)


Lesenswert?

ich bekomme ständig dieser Fehler:'D2XXDevice' has not been declared.

hat bitte jemand eine Idee?
Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.