Wie compiliert man ein WinAPI C/C++ Projekt mit dem GNU C/C++ Compiler?
-
Hallo ich will wissen, wie ich ein WinAPI Projekt mit dem GNU Compiler compilieren und linken kann?
-
Ohne Probleme?
-
MinGW:
A collection of freely available and freely distributable Windows specific header files and import libraries, augmenting the GNU Compiler Collection, (GCC), and its associated tools, (GNU binutils). MinGW provides a complete Open Source programming tool set which is suitable for the development of native Windows programs that do not depend on any 3rd-party C runtime DLLs.
Das gibts als Collection mit der Bloodshed Dev-Cpp IDE unter:
http://www.bloodshed.net/devcpp.htmlProjekt erstellen, programmieren compilen feddich,...
grüüße
-
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?
greetzIch 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.exeg++.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 erfolgreichZuerst 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.2CPP = 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): (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 coffMit dem Link und dem Beispiel solltest Du keine Schwierigkeiten mehr haben Dein Projekt fertig zu kompilieren.
Sei gegrüßt