Wie compiliert man ein WinAPI C/C++ Projekt mit dem GNU C/C++ Compiler?



  • Die ganze MinGW Suite habe ich schon installiert, nur kommt er mit dieser windows.h Datei nicht klar.



  • ok,
    in welcher form??

    Hast Du auch GUI statt konsole bei projekterstellen angegeben?
    greetz



  • Und hast Du auch die Winapi mitinstalliert? Ich glaube, soweit ich mich erinnern kann, muss man das bei der Mingw-Installation extra angeben.

    Ich hatte aber nie ein Problem damit. Falls Dein Projekt noch leer ist, fang's einfach mal neu an, mit der richtigen Vorlage in Deiner IDE.

    Ansonsten schildere Dein Problem mal genauer. Welche Fehlermeldungen kommen? Wie hast Du den Compiler / Linker aufgerufen? ...



  • zeusosc schrieb:

    ok,
    in welcher form??

    Hast Du auch GUI statt konsole bei projekterstellen angegeben?
    greetz

    Ich nutze keine IDE dazu, sondern nen normalen aber guten Editor.

    Compiliert und gelinkt habe ich es so:

    D:> gcc test.c test2.c test3.c -o meinprogramm
    


  • Weis zwar immer noch nicht wie du das machst?

    Headerdateien hast du richtig eingebunden?

    Wie hast du denn die Bibliotheken gelinkt?
    Bei vielen Compilern musst du das - nehme an bei GCC auch.

    Also entweder ein passendes Makefile basteln oder eine IDE
    nehmen die das für dich erledigt.

    MfG f.-th.



  • f.-th. schrieb:

    Wie hast du denn die Bibliotheken gelinkt?

    Ich dachte windows.h ist ne Systembibliothek, was muß man da explizit angeben?
    Die sollte doch automatisch gefunden werden.

    Unter Linux muß ich /usr/include ja auch nicht extra angeben, da es eh schon bekannt ist.



  • Da muss doch mit mindestens einer dll verlinkt werden. Nur #include reicht da nicht. Du müsstest doch eigentlich mindestens linker-Fehler bekommen. Poste die doch mal. Am besten mit dem minimalen fehlererzeugenden code. Sonst können wir hier nur Rätselraten. Am besten hältst Du dich an eine Anleitung. Zu WinApi gibt es so viel... Guck doch mal die FAQ hier im Forum an.



  • Wirdbald schrieb:

    Da muss doch mit mindestens einer dll verlinkt werden. Nur #include reicht da nicht. Du müsstest doch eigentlich mindestens linker-Fehler bekommen. Poste die doch mal. Am besten mit dem minimalen fehlererzeugenden code. Sonst können wir hier nur Rätselraten. Am besten hältst Du dich an eine Anleitung. Zu WinApi gibt es so viel... Guck doch mal die FAQ hier im Forum an.

    Bei mir kommt folgende Fehlermeldung wenn ich versuche den Code so zu compilieren:

    G:\test>gcc winapi_test.c -o winapi.exe
    E:\Home\ADMINI~1\LOKALE~1\Temp/ccm2aaaa.o:winapi_test.c:(.text+0x6e): undefined
    reference to `GetStockObject@4'
    E:\Home\ADMINI~1\LOKALE~1\Temp/ccm2aaaa.o:winapi_test.c:(.text+0x253): undefined
     reference to `TextOutA@20'
    collect2: ld returned 1 exit status
    
    G:\test>
    


  • Wie man MFC Projekte mit G++ compiliert und linkt würde ich übrigens auch noch gerne wissen.



  • ok,
    es hilft eigentlich wenn Du mal einen blick auf
    http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/
    wirfst...

    Ansonsten hier mal ein Beispiel:

    Compiler: Default compiler
    Building Makefile: "C:\Dev-Cpp\Property_Pages\Makefile.win"
    Führt make clean aus
    rm -f main.o property_sheet.o Property_Pages_private.res Property_Pages.exe

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

    g++.exe -D__DEBUG__ -c property_sheet.cpp -o property_sheet.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" -O3 -g3

    windres.exe -i Property_Pages_private.rc --input-format=rc -o Property_Pages_private.res -O coff

    g++.exe -D__DEBUG__ main.o property_sheet.o Property_Pages_private.res -o "Property_Pages.exe" -L"C:/Dev-Cpp/lib" -mwindows ../lib/libcomdlg32.a ../lib/libcomctl32.a -g3

    Ausführung beendet
    Kompilierung erfolgreich

    Zuerst wird ein clean ausgeführt,
    Dann in den ersten drei:
    erzeugung der main obj file, schau Dir dabei mal die -I statements an
    erzeugung der property sheet obj file, gleiches spiel
    resourcen werden erzeugt,..
    zum Schluss wird nur noch gelinkt,..

    und hier nochmal eine Makefile

    # Project: Property_Pages
    # Makefile created by Dev-C++ 4.9.9.2

    CPP = g++.exe -D__DEBUG__
    CC = gcc.exe -D__DEBUG__
    WINDRES = windres.exe
    RES = Property_Pages_private.res
    OBJ = main.o property_sheet.o $(RES)
    LINKOBJ = main.o property_sheet.o $(RES)
    LIBS = -L"C:/Dev-Cpp/lib" -mwindows ../lib/libcomdlg32.a ../lib/libcomctl32.a -g3
    INCS = -I"C:/Dev-Cpp/include"
    CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
    BIN = Property_Pages.exe
    CXXFLAGS = $(CXXINCS) -O3 -g3
    CFLAGS = $(INCS) -O3 -g3
    RM = rm -f

    .PHONY: all all-before all-after clean clean-custom

    all: all-before Property_Pages.exe all-after

    clean: clean-custom
    ${RM} $(OBJ) $(BIN)

    $(BIN): (OBJ)(OBJ) (CPP) $(LINKOBJ) -o "Property_Pages.exe" $(LIBS)

    main.o: main.cpp
    $(CPP) -c main.cpp -o main.o $(CXXFLAGS)

    property_sheet.o: property_sheet.cpp
    $(CPP) -c property_sheet.cpp -o property_sheet.o $(CXXFLAGS)

    Property_Pages_private.res: Property_Pages_private.rc Unbenannt2.rc
    $(WINDRES) -i Property_Pages_private.rc --input-format=rc -o Property_Pages_private.res -O coff

    Mit dem Link und dem Beispiel solltest Du keine Schwierigkeiten mehr haben Dein Projekt fertig zu kompilieren.

    Sei gegrüßt


Anmelden zum Antworten