PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Eclipse



joh
03-10-2008, 16:09
Hallo,
ich bin Neuling im Thema programmieren und baue deshalb auf eure Hilfe. ;) Mein Problem ist folgendes: Ich hab die neueste Version von Eclipse und MinGW installiert. Funktioniert auch alles ohne Probleme, wenn ich dieses Hello World Test Programm, welches in Eclipse zur Verfügung gestellt wird, ausführe.
Wenn ich jetzt aber mit meinem Buch davor sitz und anfangen will C++ zu lernen muss ich ja ein bisschen mehr programmieren. ;) So und wenn ich jetzt ein neues Projekt erstelle und ein Quelltext schreibe, dann kann ich den nicht kompilieren. Es kommt immer die Fehlermeldung "Launch failed. Binary no found."
Wenn ich mein Projekt mit dem Hello World vergleiche fehlt da auch so einiges, eben auch ein Ordner namens "Binaries".
In verschiedenen Tutorials hab ich jetzt gelesen, dass man "Managed Make C++ Project" auswählen soll. Kann ich aber leider nicht. Da steht nur "C++ Project". Und so weit ich das jetzt verstanden hab, geht es um dieses "makefile", oder? Das kann ich aber leider nicht schreiben, weil ich eben ein Anfänger bin.

Hoffe mir kann hier jemand helfen, wäre echt froh.

Danke.

Grüße joh

Berufspenner
03-10-2008, 17:15
Ich hab nun absolut keine Erfahrungen mit Eclipse, aber vermutlich musst du für jedes kleine Programm extra eine Projektumgebung erstellen. Nimm dir lieber eine IDE wie Codeblocks (http://www.codeblocks.org/). Die ist nicht so überladen wie Eclipse.

Beatkiller
05-10-2008, 08:48
Du kannst auch ein Projekt ohne Makefile erstellen. Dazu wählst du, wie schon bekannt sein dürfte:

File -> New -> C/C++ Project

Wenn du lieber C programmieren möchtest, wählst du halt C, bei C++ halt das andere.

Als nächstes erscheint das Fenster für die Projekt-Einstellungen, hier vergibst du deinen Projekt-Namen und wählst im unteren Part bei den Project Types "Executable" erweiterterst den Baum mittels [+] und wählst hier "Empty Project". Im rechten Fenster sollte dann MinGW stehen. Du kannst auf Finish klicken und dann kann es schon losgehen.

joh
05-10-2008, 09:55
Also erstmal danke an Berufspenner. Die IDE ist echt cool. Für Anfänger auf jeden Fall geeignet. Ging alles ohne Probleme.
@Beatkiller: Aber wenn ich das so mache wie du es beschreibst, dann kann ich es doch nicht kompilieren?

Beatkiller
05-10-2008, 12:06
Doch natürlich. Das Makefile-Projekt ist für Leute gedacht, die Finetuning am Projekt machen möchten. Intern arbeitet die IDE bei o.g. Projekt-Einstellungen genauso, nur kannst du bei selbstgeschriebenen Makefile den Build sehr stark beeinflussen, bspw. Manpages erstellen, Dokumentation mittels Doxygen, etc.

joh
06-10-2008, 08:17
Okay, dann bin ich wohl zu blöd dazu. :rolleyes: Ich beschreib dir mal kurz was bei mir passiert.
Also nachdem ich dann ein solches Projekt erstellt habe (wie du beschrieben hast und ich auch immer so gemacht habe), erscheint links in dem Fenster der C++ Projekte mein Projekt. Wenn ich dann den Baum des erstellten Projektes öffne erscheint ein Ordner names "Includes" (wohl irgendwelche Verweise zum Compiler?).
So, mehr nicht. Also muss ich ja noch ne Source-File erstellen oder?
Die kann ich ja dann mit rechter Maustaste auf das Projekt -> New -> Source File erstellen und im darauffolgenden Fenster benennen z.B.: test.cpp.
Dann erscheint der Kommentar und ich hab jetzt einfach nen mini quelltext zum testen geschrieben.

/*
* test.cpp
*
* Created on: 06.10.2008
* Author: Johannes Weiß
*/

#include <iostream>

using namespace std;

int main()
{
cout << "TEST" << endl;
return 0;
}


Dann muss ich das ganze Project ja builden. (Rechte Maustaste auf das Projekt -> Build Configurations -> Build -> All)
Und da taucht schon der Fehler auf. Und zwar ist mir als erstes aufgefallen, dass in dem Baum des Projektes ein Ordner fehlt, wenn ich es mit dem "Hello World" Testprogramm von Eclipse vergleiche, und zwar der mit dem Namen BINARIES.
Und unten im Problem-Fenster taucht eine Fehlermeldung auf:

/mingw/lib/libmingw32.a(main.o):main.c: undefined reference to `WinMain@16'
Vielleicht kannst du mir ja helfen.

Beatkiller
12-10-2008, 11:31
Das bedeutet, dein Linker geht davon aus, das es sich um ein GUI-Projekt handelt, bei welchem zwingend eine WinMain()-Methode vorhanden sein muss. In den Projekt-Einstellungen bei den Linker-Settings müsste dann eingestellt sein, das es sich um eine Windows-GUI-Application handelt.

Welche Eclipse-Version verwendest du genau, bzw. welche CDT-Version?

Das der Ordner Binaries fehlt, ist vollkommen klar, der wird erst angelegt (ist eigentlich nur ein virtueller CDT-Ordner), wenn das Projekt erfolgreich kompiliert und gelinkt wurde.

undefined
12-10-2008, 14:54
Da brauch er nicht zu suchen das ist ein Bug.
Ich habe mit MinGW GCC 4.2.2 und Qt4 genau das gleiche Problem.
Dies wird aber auch in der Readme beschrieben.
Nützt nur wenig wenn man in Qt eine Bibliothek erstellen will die auf QT+=gui zugreift.


0.2 Usage Notes

Unlike some previous releases of Mingw32 the current version defaults to
building console applications, the same way that GCC normally does when
installed from the Cygnus distribution. The Mingw32 specs file also
introduces two command line arguments to GCC which can be used to
conveniently specify a console or GUI type build. When building console
programs "-console" can be used on the GCC command line, while GUI
programs can be built by specifying "-windows" (I tried defining -gui,
and it works, but produces an annoying warning about -gui not being
supported (?)). For example:

gcc -o hellogui.exe hellogui.c -luser32 -windows

Although using different "crt0" files for GUI and console applications
has been suggested I have left the system more-or-less as it was in
0.1.1: crt0 sets up for and calls main, and if you don't supply a main
there is one in libmingw32.a, which in turn calls WinMain (actually
WinMain@16). This allows either main or WinMain entry points in console
or GUI applications, but if you don't supply main or WinMain, or don't
prototype WinMain as __stdcall__ you will get a linker error about an
"unresolved reference to WinMain@16." This is unfortunately cryptic, but
otherwise the system works quite well.

An important note if you want to rebuild from the sources of Mingw32 or
otherwise use the special version of Jam made for Mingw32: you need to
have a version of "rm", the UNIX equivalent of del, somewhere in your
path to use the current Jambase (which is built into the Jam
executable). The version that comes with the Cygnus files is perfectly
adequate.

Beatkiller
12-10-2008, 16:28
Ah, gut zu wissen, das Problem tritt nämlich mit 3.4.5 nicht auf. Allerdings widerspricht dein Zitat ein bisschen dem Beispiel. Joh hat ja gezeigt, das er eine main() Funktion hat. Demzufolge dürfte die main aus der Runtime nicht verwendet werden. Ist ein bisschen Konfus.

Wenn es mir eins zeigt, dann, das ich demnächst nicht auf 4.x umsteigen werde. ;-)

undefined
12-10-2008, 18:40
Das Problem tritt aber auch nur dann auf wenn in einer der abhängigen Bibliotheken eine grafische Bindung besteht. Sein Program wird auf jeden fall laufen.


:~> i686-pc-mingw32-g++ -o hellogui.exe hellogui.cpp
:~> wine hellogui.exe
TEST


Was gcc betrifft, auf den MinGW Seiten wird auch darauf hingeweisen das GCC >= 4.* noch als beta getestet wird.
Nur macht es bei mir keinen sinn für ein paar Programme einen kleineren Cross Compiler zu Installieren.

joh
13-10-2008, 08:24
Danke erstmal für die neuen Beiträge, die mir glaub ich sagen, dass ich doch nicht ganz verblödet bin...
Was mich jetzt allerdings noch ein wenig stört, ist, dass ich nicht unbedingt alles was ihr beschrieben habt verstanden hab. :rolleyes: Was bedeutet, dass ich nochmal nachfragen muss:
1.
Da brauch er nicht zu suchen das ist ein Bug.
Ich habe mit MinGW GCC 4.2.2 und Qt4 genau das gleiche Problem.
Wenn es mir eins zeigt, dann, das ich demnächst nicht auf 4.x umsteigen werde. ;-)
Soll ich also die ältere MinGW Version einfach installieren? Wobei das ja dann trotzdem ein Eclipse Problem ist irgendwie, oder? Denn mit "CodeBlocks", was mir Berufspenner empfohlen hat, funktioniert das alles ja.

2.
Das Problem tritt aber auch nur dann auf wenn in einer der abhängigen Bibliotheken eine grafische Bindung besteht. Sein Program wird auf jeden fall laufen.
Also doch irgendwie zu lösen?

Ach und das GCC >= 4.* noch ne Beta Version ist wusste ich schon. Dachte nur nicht das es solche Probleme am Anfang bereitet. Wollte einfach den neuesten Stand haben.

Beatkiller
14-10-2008, 18:38
1.
Soll ich also die ältere MinGW Version einfach installieren? Wobei das ja dann trotzdem ein Eclipse Problem ist irgendwie, oder? Denn mit "CodeBlocks", was mir Berufspenner empfohlen hat, funktioniert das alles ja.


Ich kenne Codeblocks nicht, möglicherweise startet diese IDE den Compiler/Linker etwas anders als Eclipse, was bedeutet, das CB andere Compiler/Linker-Optionen verwendet. Dann wäre eine entsprechende Anlaufstelle für die Lösung (falls du immer noch eclipse verwenden willst), herauszu bekommmen, welche Compiler-Optionen CB verwendet. Diese könntest du dann natürlich auch in Eclipse verwenden, in dem du die Projekt-Settings bearbeitest.



2.
Also doch irgendwie zu lösen?


Würde ich sagen, ja. Wie schon oben beschrieben, kannst du mit den Linker- bzw. Compiler-Optionen spielen.



Ach und das GCC >= 4.* noch ne Beta Version ist wusste ich schon. Dachte nur nicht das es solche Probleme am Anfang bereitet. Wollte einfach den neuesten Stand haben.


Bei Entwicklern, die beruflich den ganzen Tag nix anderes machen, spielt es nicht unbedingt die Rolle, immer die neuste Software zu verwenden. Bei uns arbeiten sehr viele noch mit Eclipse 3.x und CDT 4.0. Als Compiler verwenden alle gcc 3.3. Hat etwas mit Stabilität des erzeugten Codes zu tun. Und natürlich, weil man die spezifischen Compiler-Probleme kennt. Ein neuer Compiler kann auch immer ein Show-Stopper sein. Kommt natürlich auf die Größe des Projektes an.

Ich arbeite mit Ganymede und CDT 5.0, allerdings gcc/mingw-3.4.5 (privat).