DevC++ mit C++ Dateen und C Dateien
-
Hallo an alle,
Bei meinem Projet möchte ich gerne eine Dateien aus einem fertigen C Projekt verwenden. Diese File benötigt auch die errno.h Header Datei.
In meiner C++ Datei will ich nun die C Funktion aufrufen. Zuerst mache ich einen Verweiß: extern "C" int http_fetch(const char *url, char **fileBuf);
Doch bim kompilieren bekomme ich immer 2 Fehlermeldungen vom Linker :
Objects/MingW/http_fetcher.o:http_fetcher.c:(.text+0x6c7): undefined reference to `_errno()' Objects/MingW/usbprog.o:usbprog.cpp:(.text+0x450): undefined reference to `http_fetch'
Ich denke der Compiler behandelt die Dateien als C++ Files und deshalb gibt es Probleme...
Was kann ich dagegen machen?
Danke im Voraus
Gruß Robert
-
Hat keiner eine Lösung dafür?
Das Problem eilt nämlich....
-
Du hast dem Compiler nur gesagt, daß es die Funktionen errno() und http_fetch() irgendwo gibt. Aber um sie verwenden zu können, mußt du ihm auch sagen, WO er die Funktionen findet.
-
In den entsprechenden Datein sind aber die Headerfiles inkludiert.
In der usb.h steht:
#include "http_fetch.h"
Und in der http_fetch.h steht #include <errno.h>Gruß Roebrt
-
Ja, die Header enthalten aber nur die Funktions-Prototypen (Namen und Parameter)
du mußt die dazugehörigen .C/.CPP bzw. .LIB Dateien dem Linker übergeben, damit er weiß, was sich hinter diesen Namen verbirgt.
-
Die zugehörige C Datei ist auch im Projekt dabei. Es wird auch die Ojektdatei erzeugt und der Linkeraufruf schein auch zu stimmen:
g++.exe Objects/MingW/usbprogApp.o Objects/MingW/usbprogFrm.o Objects/MingW/usbprog.o Objects/MingW/http_error_codes.o Objects/MingW/http_fetcher.o Objects/MingW/xmlParser.o Objects/MingW/usbprog_private.res -o
-
Wenn ih mir das Makefile anschaue, werden da http_fetcher.c und http_error_codes.c mit dem C++ Compilier kompiliert und nicht mit dem GCC?
Ist das richtig so?
# Project: Projekt2 # Compiler: Default GCC compiler # Compiler Type: MingW 3 # Makefile created by wxDev-C++ 6.10.2 on 14.08.07 16:10 CPP = g++.exe CC = gcc.exe WINDRES = windres.exe OBJ = Objects/MingW/usbprogApp.o Objects/MingW/usbprogFrm.o Objects/MingW/usbprog.o Objects/MingW/xmlParser.o Objects/MingW/http_error_codes.o Objects/MingW/http_fetcher.o Objects/MingW/usbprog_private.res LINKOBJ = Objects/MingW/usbprogApp.o Objects/MingW/usbprogFrm.o Objects/MingW/usbprog.o Objects/MingW/xmlParser.o Objects/MingW/http_error_codes.o Objects/MingW/http_fetcher.o Objects/MingW/usbprog_private.res LIBS = -L"C:/Programme/Dev-Cpp/Lib" -L"C:/Programme/LibUSB-Win32/lib/gcc" -lusb -mwindows -lwxmsw28 -lwxmsw28_gl -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32 -lopengl32 INCS = -I"include" -I"C:/Programme/LibUSB-Win32/include" CXXINCS = -I"C:/Programme/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Programme/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Programme/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Programme/Dev-Cpp/include/c++/3.4.2" -I"C:/Programme/Dev-Cpp/include" -I"C:/Programme/Dev-Cpp/" -I"C:/Programme/Dev-Cpp/include/common/wx/msw" -I"C:/Programme/Dev-Cpp/include/common/wx/generic" -I"C:/Programme/Dev-Cpp/include/common/wx/fl" -I"C:/Programme/Dev-Cpp/include/common/wx/gizmos" -I"C:/Programme/Dev-Cpp/include/common/wx/html" -I"C:/Programme/Dev-Cpp/include/common/wx/mmedia" -I"C:/Programme/Dev-Cpp/include/common/wx/net" -I"C:/Programme/Dev-Cpp/include/common/wx/ogl" -I"C:/Programme/Dev-Cpp/include/common/wx/plot" -I"C:/Programme/Dev-Cpp/include/common/wx/protocol" -I"C:/Programme/Dev-Cpp/include/common/wx/stc" -I"C:/Programme/Dev-Cpp/include/common/wx/svg" -I"C:/Programme/Dev-Cpp/include/common/wx/xml" -I"C:/Programme/Dev-Cpp/include/common/wx/xrc" -I"C:/Programme/Dev-Cpp/include/common/wx" -I"C:/Programme/Dev-Cpp/include/common" RCINCS = --include-dir "C:/PROGRA~1/Dev-Cpp/include/common" BIN = Output/MingW/usbprog.exe DEFINES = -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__ CXXFLAGS = $(CXXINCS) $(DEFINES) -fno-exceptions -fno-pcc-struct-return -fstrict-aliasing -Wall -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__ -lusb -fexpensive-optimizations -O3 CFLAGS = $(INCS) $(DEFINES) -fno-exceptions -fno-pcc-struct-return -fstrict-aliasing -Wall -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__ -lusb -fexpensive-optimizations -O3 GPROF = gprof.exe RM = rm -f LINK = g++.exe .PHONY: all all-before all-after clean clean-custom all: all-before $(BIN) all-after clean: clean-custom $(RM) $(OBJ) $(BIN) $(BIN): $(OBJ) $(LINK) $(LINKOBJ) -o "Output\MingW\usbprog.exe" $(LIBS) Objects/MingW/usbprogApp.o: $(GLOBALDEPS) usbprogApp.cpp usbprogApp.h usbprogFrm.h $(CPP) -c usbprogApp.cpp -o Objects/MingW/usbprogApp.o $(CXXFLAGS) Objects/MingW/usbprogFrm.o: $(GLOBALDEPS) usbprogFrm.cpp usbprogFrm.h usbprog.h ../../../../Programme/LibUSB-Win32/include/usb.h xmlParser.h http_fetcher.h http_error_codes.h Images/usbprogFrm_WxStaticBitmap1_XPM.xpm $(CPP) -c usbprogFrm.cpp -o Objects/MingW/usbprogFrm.o $(CXXFLAGS) Objects/MingW/usbprog.o: $(GLOBALDEPS) usbprog.cpp usbprog.h ../../../../Programme/LibUSB-Win32/include/usb.h xmlParser.h xmlParser.h $(CPP) -c usbprog.cpp -o Objects/MingW/usbprog.o $(CXXFLAGS) Objects/MingW/xmlParser.o: $(GLOBALDEPS) xmlParser.cpp xmlParser.h $(CPP) -c xmlParser.cpp -o Objects/MingW/xmlParser.o $(CXXFLAGS) Objects/MingW/http_error_codes.o: $(GLOBALDEPS) http_error_codes.c $(CPP) -c http_error_codes.c -o Objects/MingW/http_error_codes.o $(CXXFLAGS) Objects/MingW/http_fetcher.o: $(GLOBALDEPS) http_fetcher.c http_fetcher.h http_error_codes.h $(CPP) -c http_fetcher.c -o Objects/MingW/http_fetcher.o $(CXXFLAGS) Objects/MingW/usbprog_private.res: Objects/MingW/usbprog_private.rc usbprogApp.rc $(WINDRES) --input-format=rc -o Objects/MingW/usbprog_private.res $(RCINCS) Objects/MingW/USBPRO~1.RC -O coff
-
Das mit dem http_fetch() hab ich hinbekommen...
Aber warum klappt das mit dem _errno() nicht. Das ist doch eine Standardfunkion aus der errno.h, oder?
Die errno.h ist im Stansrsinludeverzeichnissvorhande...
Langsam weiß ich echt nicht mehr weiter....
Gruß Robert
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.