Fehler beim linken [ILINK32 Fehler] Error: Nicht aufl÷sbares externes...
-
hi
ich hab folgende Funktionen in mein CodeGear eingebunden:
http://libnodave.sourceforge.net/Nun hab ich alles hinbekommen halbwegs verstanden und wollte loslegen also erstes Programm geschrieben das so aussieht:
//---------------------------------------------------------------------------
#pragma hdrstop
#define BCCWIN
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "nodavesimple.h"
//#include "nodave.h"
#include "setport.h"
//---------------------------------------------------------------------------#pragma argsused
int main(int argc, char* argv[])
{
_daveOSserialType fds;
daveInterface * di;
daveConnection * dc;
int res;
char buffer [255];
fds.rfd=setPort("COM1", "9600", 'O');
fds.wfd=fds.rfd;
if (fds.rfd > 0) {
di = daveNewInterface(fds, "IF1", 0, daveProtoPPI, daveSpeed9k);
daveSetTimeout(di,5000000);
if (daveInitAdapter(di) == 0) {
dc = daveNewConnection(di, 2, 0, 0);
if (daveConnectPLC(dc) == 0) {
if (daveReadBytes(dc, daveSysInfo,0,0,20,NULL) == 0) {
res = daveGetS16(dc);
}
}
}
}
itoa (res, buffer, 255);
printf(buffer);
getchar();
}
//---------------------------------------------------------------------------Leider klappt das compilieren nicht fehler lautet
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes 'setPort' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveNewInterface(_daveOSserialType, char *, int, int, int)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveSetTimeout(_daveInterface *, int)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveInitAdapter(_daveInterface *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveNewConnection(_daveInterface *, int, int, int)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveConnectPLC(_daveConnection *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveReadBytes(_daveConnection *, int, int, int, int, void *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall daveGetS16(_daveConnection *)' referenziert von C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\EIGENE DATEIEN\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJalso hab ich ein testprogramm was bei lag (im quellcode) versucht zu compilieren und auch da kam der gleiche Fehler.
wer kann damit was anfangen an was könnte das liegen? gehe davon aus dass das Programm richtig ist nur irgendwo im linker oder so was falsche ingestellt ist es lag ebenfalls eine dll datei bei wo ich nicht genau wusste wohin mit der hab sie ins %winnt%/system32 kopiert da ich davon ausgehe das er die dann auf jeden fall nimmt.
mfg
chris
-
Der Linker erwartet dort keine DLL, sondern eine .LIB - und da mußt du ihm sagen, wo er sie findet.
-
hi
danke für die Antwort bin jetzt nicht daheim aber ne *.lib müsste ich irgendwo haben wo erwartet der linker die datei denn? Oder wo kann ich ihn sagen wo er sie findet?
mfg
chris
-
hi
hab eine *.lib gefunden und zwar ne libnodave.lib hab die ins %codegear%/lib verzeichniss kopiert aber der fehler bleibt
mfg
chris
-
Du mußt dem Linker natürlich auch sagen, daß er diese Lib verwenden soll (je nach Compiler kannst du das entweder in den Projektoptionen einstellen (VC: Project->Settings->Link->Object/library modules) oder als Parameter beim Compilieren mit angeben.
-
hi
wo stell ich das denn bei codegear ein? Oder wo geb ich den parameter an?
mfg
chris
-
Oder explizit:
#pragma comment(lib,"LIBNAME.lib");
-
hi
hab mir die lib nun mit implib aus der dll erzeugt und sie so verwendet:
//--------------------------------------------------------------------------- #pragma hdrstop #pragma comment(lib,"libnodavec.lib"); #define BCCWIN #include <stdlib.h> #include <stdio.h> #include <string.h> extern "C" { #include "nodavesimple.h" //#include "nodave.h" } #include "setport.h" //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { _daveOSserialType fds; daveInterface * di; daveConnection * dc; int res; fds.rfd=setPort("COM1", "9600", 'O'); fds.wfd=fds.rfd; if (fds.rfd > 0) { di = daveNewInterface(fds, "IF1", 0, daveProtoPPI, daveSpeed9k); daveSetTimeout(di,5000000); if (daveInitAdapter(di) == 0) { dc = daveNewConnection(di, 2, 0, 0); if (daveConnectPLC(dc) == 0) { if (daveReadBytes(dc, daveDB, 1, 0, 2, NULL) == 0) { res = daveGetS16(dc); } } } } getchar(); } //---------------------------------------------------------------------------
nun sagte r zwar noch [BCC32 Warnung] File1.cpp(4): W8094 Falsche Verwendung von #pragma comment( <typ> [,"string"]) aber das dürfte nicht das Problem sein denn laufen tut das Programms chonmal es lässt sich compilieren vielen dank an alle
mfg
chris
-
1. Simpler Fehler: Nach einer Pärprozessoranweisung folgt niemals ein Semikolon.
2. Mein Compiler sagt mir soetwas.
3. Mich wundert es, dass nur so wenig Leute dieses Problem haben...
4. ...und es nicht endlich in der FAQ eine Artikel darüber gibt
MfG Chris