phost
Anmeldungsdatum: 12. August 2014
Beiträge: 35
|
Hallo, ich habe vorhin meine ersten Versuche gestartet ein C++ Programm (bisher ist es kaum mehr als das typische "Hello World" 😀) unter Linux zum Laufen zu bekommen.
Dazu benutze ich auf meinem Windoof Rechner Netbeans zum Coden, schiebe die .cpp dann auf den Server und kompiliere sie dort.
Soweit so gut.. Allerdings bekomme ich da teilweise Fehler die unter Windows nicht auftauchen wenn ich es kompiliere.
Zum Beispiel wenn ich den System-Namespace benutze, scheint Linux diesen nicht zu kennen? (Das ist mir passiert als ich testweise mal mit Visual Studio 2013 geschrieben habe) Daher jetzt also meine Frage:
Muss ich mein Programm wirklich auch unter Linux schreiben? Es sollte doch eigentlich möglich sein den Code als solches auch komplett unter Windows zu schreiben? Und wenn ja, gibt es Dinge die ich dabei beachten muss?
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
phost schrieb: Zum Beispiel wenn ich den System-Namespace benutze, scheint Linux diesen nicht zu kennen? (Das ist mir passiert als ich testweise mal mit Visual Studio 2013 geschrieben habe)
Was ist denn der "System-Namespace" konkret?
Daher jetzt also meine Frage:
Muss ich mein Programm wirklich auch unter Linux schreiben? Es sollte doch eigentlich möglich sein den Code als solches auch komplett unter Windows zu schreiben? Und wenn ja, gibt es Dinge die ich dabei beachten muss?
Naja, Du musst eben alles vermeiden, was plattformabhängig ist! (Bei C ist das die nette conio.h z.B., die immer mal wieder gerne ohne Not genommen wird). Und für alles, was plattformabhängig ist, musst Du am besten durch bedingte Kompilierung o.ä. eine Lösung schaffen, bei der je nach Plattform nur ein bestimmter Codeteil integriert wird. Zudem spielen Build-Systeme noch eine Rolle. MS Build ist sicherlich nicht für Linux verfügbar - da solltest Du von Anfang an auf einen plattformübergreifenden Standard setzen. Und wenn Du es Dir einfacher machen willst, nimmst Du eben erst gar kein C++, sondern etwas von vorn herein plattformunabhängiges und zudem idR. angenehmeres 😈
|
phost
(Themenstarter)
Anmeldungsdatum: 12. August 2014
Beiträge: 35
|
Was der genau ist kann ich dir so spontan gar nicht sagen..
War wie gesagt nur ein kleiner Test und Visual Studio hat das halt direkt so eingefügt^^ Lysander schrieb: Und wenn Du es Dir einfacher machen willst, nimmst Du eben erst gar kein C++, sondern etwas von vorn herein plattformunabhängiges und zudem idR. angenehmeres 😈
Damit spielst du wohl auf Java an?^^ Das habe ich mir in der Tat bereits überlegt..
Dafür brauch ich auf meinem Server ja vermutlich lediglich die Java Runtime und kann damit dann meine .js Dateien direkt ausführen??
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
phost schrieb: Was der genau ist kann ich dir so spontan gar nicht sagen..
War wie gesagt nur ein kleiner Test und Visual Studio hat das halt direkt so eingefügt^^
Dann zeig doch mal den Code.
Lysander schrieb: Und wenn Du es Dir einfacher machen willst, nimmst Du eben erst gar kein C++, sondern etwas von vorn herein plattformunabhängiges und zudem idR. angenehmeres 😈
Damit spielst du wohl auf Java an?^^
Da gibt es mehrere Optionen - außer Java mindestens noch die ganzen interpretierten Sprachen wie Ruby, Pathon etc.
Dafür brauch ich auf meinem Server ja vermutlich lediglich die Java Runtime und kann damit dann meine .js Dateien direkt ausführen??
▶ JavaScript ist nicht Java! ◀ Java-Quellen haben die Endung .java. Zum Ausführen musst Du sie übersetzen. Dann heißen sie .class. Du kannst sie noch zu Bibliotheken zusammenpacken - dann heißen sie .jar. Aber sie heißen niemals .js, denn das sind JavaScript-Quellen. Ciao robert
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
phost schrieb:
Dafür brauch ich auf meinem Server ja vermutlich lediglich die Java Runtime und kann damit dann meine .js Dateien direkt ausführen??
Die .js-Dateien sind Javascript. Javadateien heißen .java und compiliert .class bzw. gepackt .jar. Bei jedem Problem die Sprache zu wechseln ist aber nicht der richtige Weg. Welche Fehlermeldung bekommst Du konkret mit C++?
|
phost
(Themenstarter)
Anmeldungsdatum: 12. August 2014
Beiträge: 35
|
rklm schrieb: Dafür brauch ich auf meinem Server ja vermutlich lediglich die Java Runtime und kann damit dann meine .js Dateien direkt ausführen??
▶ JavaScript ist nicht Java! ◀ Java-Quellen haben die Endung .java. Zum Ausführen musst Du sie übersetzen. Dann heißen sie .class. Du kannst sie noch zu Bibliotheken zusammenpacken - dann heißen sie .jar. Aber sie heißen niemals .js, denn das sind JavaScript-Quellen.
Tschuldige habe das durcheinander geworfen^^ Ich meinte natürlich .java, .js war eher die Macht der Gewohnheit.. Ich werde die Fehlermeldungen mit entsprechendem Code heute Abend posten, schreibe gleich erst noch ne Klausur.
Werde dann ggf den Post hier dann einfach editieren. Aber wie sieht es mit dem Ressourcenverbauch aus? Also im Vergleich Java und C++?
Kompiliert Java das einmal fertig so das es dann effektiv wie ein C++ Programm wäre oder läuft Java-Code grundsätzlich immer über den Java-Interpreter?
Bei dem was ich vorhabe wäre der Unterschied vermutlich nicht spürbar aber interessieren würde es mich dennoch..?
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
phost schrieb: Aber wie sieht es mit dem Ressourcenverbauch aus? Also im Vergleich Java und C++?
Gut für beide. Weder Java, noch C++ verbrauchen viele Ressourcen, nur ein wenig Strom.
Andere Ressourcen werden nur temporär belegt, aber danach wieder freigegeben.
Kompiliert Java das einmal fertig so das es dann effektiv wie ein C++ Programm wäre oder läuft Java-Code grundsätzlich immer über den Java-Interpreter?
Falsche Dichotomie. Bist Du Deutscher oder kannst Du Englisch? Man pflegt die JVM VM zu nennen, nicht Interpreter, weil es ein Bytecode ist, der von der JVM ausgeführt wird, aber von mir aus nenne es Interpreter. Grundsätzlich läuft Java darüber aber ist trotzdem in den meisten Fällen gleich oder ähnlich schnell wie C++. Durch Just-In-Time-Compilierung kann der Code ohne Neucompilierung auf der jeweiligen Maschine, auf der er läuft und im jeweiligen Setting optimiert werden. Bei sehr kleinen oder kurzlaufenden Programmen hast Du einen Unterschied, weil die JVM selbst geladen werden muss; das macht sich bei sehr kurzen Programmen bemerkbar, und bei sehr kleinen.
Bei dem was ich vorhabe wäre der Unterschied vermutlich nicht spürbar aber interessieren würde es mich dennoch..?
|
Fanatics
Anmeldungsdatum: 25. August 2010
Beiträge: 1032
|
Ich weiß von Visual Studio, dass dort eine Menge plattformabhängiger Krempel standardmäßig eingefügt wird. Mit VS kann man nicht plattformunabhängig programmieren. Nimm einen Editor, bei dem Du bestimmst, welche Bibliotheken eingefügt werden.
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
user unknown schrieb: Bei jedem Problem die Sprache zu wechseln ist aber nicht der richtige Weg. Welche Fehlermeldung bekommst Du konkret mit C++?
Da der OP offenbar noch keine große Erfahrung mit C++ hat *und* zumindest in dem Projekt noch keinen Code geschrieben hat, so ist das ja kein Wechsel, sondern eine ernsthafte Überlegung a priori, ob die bis dato gewählte Sprache wirklich die richtige Wahl ist. Aber ja, ich verhehle ja auch nicht, dass ich C++ nicht leiden kann 😎
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
user unknown schrieb: phost schrieb:
Kompiliert Java das einmal fertig so das es dann effektiv wie ein C++ Programm wäre oder läuft Java-Code grundsätzlich immer über den Java-Interpreter?
Falsche Dichotomie. Bist Du Deutscher oder kannst Du Englisch?
😀
Man pflegt die JVM VM zu nennen, nicht Interpreter, weil es ein Bytecode ist, der von der JVM ausgeführt wird, aber von mir aus nenne es Interpreter. Grundsätzlich läuft Java darüber aber ist trotzdem in den meisten Fällen gleich oder ähnlich schnell wie C++. Durch Just-In-Time-Compilierung kann der Code ohne Neucompilierung auf der jeweiligen Maschine, auf der er läuft und im jeweiligen Setting optimiert werden.
Genau deswegen finde ich den Begriff "Interpreter" nicht passend: die JVM arbeitet deutlich anders als ein reiner Interpreter, weil sie halt Bytecode interpretiert (und nicht etwa Java-Code, wie das klassische Interpreter machen) und im Zweifelsfall das Java-Programm bzw. Teile davon als Maschinencode der Plattform ausführt.
Bei dem was ich vorhabe wäre der Unterschied vermutlich nicht spürbar aber interessieren würde es mich dennoch..?
Neugier ist nicht die schlechteste Triebfeder etwas neues zu lernen. 👍
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
rklm schrieb: Genau deswegen finde ich den Begriff "Interpreter" nicht passend: die JVM arbeitet deutlich anders als ein reiner Interpreter, weil sie halt Bytecode interpretiert (und nicht etwa Java-Code, wie das klassische Interpreter machen) und im Zweifelsfall das Java-Programm bzw. Teile davon als Maschinencode der Plattform ausführt.
Gibt es denn überhaupt noch populäre Implementierungen von Programmiersprachen, die tatsächlich klassisch interpretiert werden, also ohne Überführung in ein Bytecode-Format? (Sprachen wie die Bash o.ä. DSL mal außen vorgelassen)
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
Lysander schrieb:
Gibt es denn überhaupt noch populäre Implementierungen von Programmiersprachen, die tatsächlich klassisch interpretiert werden, also ohne Überführung in ein Bytecode-Format? (Sprachen wie die Bash o.ä. DSL mal außen vorgelassen)
Vielleicht irgendwelche BASIC-Interpreter. Ich würde aber tatsächlich auch erwarten, dass aktuelle Software, d.h. solche, die noch gepflegt wird, mindestens auf dem AST oder einem Bytecode-Format arbeitet. Bei den bekannten Sprachen Ruby, Python und Perl ist das ja auf jeden Fall der Fall.
|
phost
(Themenstarter)
Anmeldungsdatum: 12. August 2014
Beiträge: 35
|
Naja für mich habe ich es halt "Interpreter" genannt weil es ja nicht in dem Sinne kompiliert wird das man eine neue ausführbare Datei dadurch erhält..
Und ich bin jetzt erst daheim angekommen, werde es also heute nicht mehr schaffen die Beispiel zu posten, sorry -.-" Fanatics schrieb: Ich weiß von Visual Studio, dass dort eine Menge plattformabhängiger Krempel standardmäßig eingefügt wird. Mit VS kann man nicht plattformunabhängig programmieren. Nimm einen Editor, bei dem Du bestimmst, welche Bibliotheken eingefügt werden.
Welchen Editor würdest du denn empfehlen? Ich habe da NetBeans im Auge da ich damit auch meinen Webdesign-Kram mache. Allerdings scheint (zumindest mein) NetBeans noch Probleme mit der Code-Completion zu haben. Insbesonde wenn es darum geht das mir automatisch Funktionen etc. vorgeschlagen werden.
|
Fanatics
Anmeldungsdatum: 25. August 2010
Beiträge: 1032
|
@phost Meine Antwort wird Dir nicht gefallen. 😈 Wenn es um den Einstieg in die Programmierung geht, verfechte ich den minimalistischen Ansatz: Texteditor mit Syntaxhighlighting. Alle IDEs, die ich kennengelernt habe, sorgten bei Einsteigern nur für Verwirrung und Fehlerquellen, die man nicht logisch nachvollziehen konnte (mit dem zu dem Zeitpunkt vorhandenen Wissensstand). Im Texteditor hast Du alles unter Kontrolle und das Synatxhighlighting reicht zum Anfang für die Fehlersuche, so komplex sind die Codebeispiele ja zu Anfang meist nicht. Grüße Fanatics
|
phost
(Themenstarter)
Anmeldungsdatum: 12. August 2014
Beiträge: 35
|
Nun ich würde mal behaupten das ich bereits so fortgeschritten bin das ich auch mit bissl mehr "bunt" Fehler nachvollziehen kann *g*
Jetzt aber erstmal die Code-Beispiele mit Compiler-Fehlermeldung.. Visual Studio
| #include <stdio.h>
using namespace System;
int main(int argc, char** argv)
{
printf("test");
return 0;
}
|
wobei ich da Beispiel bereits "angepasst" habe.. als ich das Projekt neu erstellt hatte sah es so aus:
| // ConsoleApplication1.cpp: Hauptprojektdatei.
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}
|
Ich poste jetzt mal nur die Fehlermeldung zum ersten Beispiel.. weil wie gesagt.. das zweite war mir auch schon total suspekt 😀
| /opt/MediaServer/Musicplayer.cpp:6:17: error: ‘System’ is not a namespace-name
/opt/MediaServer/Musicplayer.cpp:6:23: error: expected namespace-name before ‘;’ token
|
Kompilieren mache ich mit dem normalen g++-Compiler auf dem Server selbst. Soweit mein Kenntnisstand reicht würde ich sagen das der "System"-Namespace vermutlich Windows-spezifische Systemfunktionen bereitstellt und somit vom Compiler auf Linux logischerweise bemeckert wird. Mit Netbeans bekomme ich eine folgendes wenn ich ne neue Datei erstelle:
| #include <stdio.h>
#include <stdlib.h>
/*
*
*/
int main(int argc, char** argv) {
return (EXIT_SUCCESS);
}
|
Das finde ich schonmal deutlich verständlicher und vor allem weniger überladen.
Bloß habe ich bei NetBeans wie gesagt noch das Problem, dass dort Funktionen nicht erkannt werden und dann von NetBeans rot angekreidet werden. Ich könnte natürlich auch unter Linux programmieren, dann hätte ich das Problem vermutlich nicht. Allerdings habe ich wenig Lust mir extra zu diesem Zweck noch Linux auf meinen Laptop zu schmeißen.
|