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.


Anmelden zum Antworten