PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nativ unter Linux programmieren



Iteranium
05-07-2010, 17:07
Hallo,

Ich habe inzwischen recht viel mit Java gemacht, dann noch PHP, ein wenig ANSI C. Etwas Delphi (Pascal) ist noch dazu gekommen und eben jede Menge Spezialsprachen wie HTML, CSS, SQL. Ein klein wenig Ahnung habe ich dann noch in Regex, LaTeX, Tikz, Bash, …

Das Problem ist jedoch, dass meine Programme immer wie Fremdkörper wirken. Java sieht einfach immer anders aus und braucht immer die Java VM. PHP und Zubehör lässt sich auf dem Webserver noch schön benutzen, aber für lokale Anwendungen ist es nicht brauchbar. Und die restlichen taugen ja erst gar nicht zur Programmentwicklung.

Jetzt würde ich gerne Programme so entwickeln, dass sie wirklich absolut nativ unter Linux funktionieren, und man sie auch in ein Repository einstellen könnte. Graphische Anwendungen wären auch noch nett, da wäre Gnome als Oberfläche meine Wahl.

Welche Sprache brauche ich dazu? Kann ich als Editor den vim benutzen? Und welche Stichworte brauche ich, um graphische Anwendungen zu schreiben, die super unter die anderen Gnome Programme passen?

Danke!

sommerfee
05-07-2010, 17:31
Graphische Anwendungen wären auch noch nett, da wäre Gnome als Oberfläche meine Wahl. Welche Sprache brauche ich dazu?

Da kämen viele in Frage, die meisten (wie ich auch) programmieren Gnome-Anwendungen wohl in C:

http://www.gtk.org/language-bindings.html

Liebe Grüße,
Axel

Iteranium
05-07-2010, 17:36
Also wäre ich mit C++ voll dabei, und wenn ich dann graphisch weitermachen möchte, ist GTK+ mein Partner?

„C++ unter Linux“ sollte sich im Netz ja finden lassen, auch wie ich dann den vim benutzen kann.

Programme in C++ sollten ja auch unter OS X und Windows laufen, wie sieht es denn mit GTK+ aus, bekommt man das unter Windows und OS X auch zum laufen?

jeebee
05-07-2010, 18:39
1) C != C++, allerdings gibts GTK+ für praktisch jede Sprache (C++ zb: http://gtkmm.org/)
2) GTK+ bringst du unter Windows (http://www.gtk.org/download-windows.html) sicher (hab ich schon gemacht), und unter OSX wohl auch zum laufen (http://gtk-osx.sourceforge.net/).
3) Wenn du allerdings beginnst, auch GNOME-spezifische Dinge zu nutzen, wirds mit der Portabilität wohl schwieriger.
4) C++ läuft auf allen Plattformen, sofern du dir etwas Mühe gibst, plattformunabhängig zu programmieren.

Iteranium
05-07-2010, 19:07
Ich habe das immer so verstanden, dass C quasi tot ist und jetzt alles in C++ gemacht wird. Werden noch aktuelle Programme (sagen wir Nautilus) in C geschrieben?

Was sollte ich jetzt also lernen/vertiefen?


Außerdem würde ich meine Programme gerne so veröffentlichen, dass man sie direkt mit einem Paketmanager installieren kann. Ist es da sinnvoll sein eigenes Repository aufzumachen, oder zu einer Seite wie SourceForge oder Launchpad zu gehen?

Wenn ich alleine programmiere, ist SVN dann überzogen?

jeebee
05-07-2010, 19:50
SVN (oder git, oder mercurial (hg) , oder bazaar (bzr)) ist nie überzogen, schon darum nicht, weil du a) Backups deines Codes hast und b) etwas ausprobieren kannst, ohne den alten Code in Kommentaren mitschleppen zu müssen, weil du noch nicht sicher bist, ob du die neue Version verwenden willst.

Nautilus (http://git.gnome.org/browse/nautilus/tree/src) sowie viele weitere core-Komponenten des GNOME-Desktops sind weiterhin in C (nicht C++) geschrieben.

Zum Veröffentlichen würde ich einen bestehenden Projekt-Hoster (wie die von dir erwähnten sourceforge, Launchpad, oder auch BerliOS oder ...) verwenden. Allerdings wirst du die Pakete für die Distributionen vorerst (solange keine grosse Nachfrage nach deinen Tools besteht) selber bauen müssen.

Launchpad eignet sich besonders, wenn du primär für *Ubuntu entwickeln willst, da du dort die möglichkeit der ppa-repositories hast, welche bei Ubuntu in die Paketquellen eingebunden werden können.

Iteranium
05-07-2010, 20:35
Okay, ich habe jetzt mal einen Launchpad Account registriert und bzr auf meinem Laptop installiert. Sehr nett war die Fehlermeldung gerade: „make: gcc: command not found“ :D

Jetzt muss ich noch ein wenig Ausprobieren und lesen, bis ich das alles verstanden habe (branch, push, commit, tree, trunk, …), aber das geht wahrscheinlich schon in die richtige Richtung.

Berufspenner
06-07-2010, 09:16
Mh, ist es nicht sinnvoller zunächst erstmal eine Idee für ein Softwareprojekt zu haben und dann zu gucken, in welcher Sprache und mit welchen Hilfsbibliotheken es sich am idealsten realisieren lässt, bevor du dir gedanken machst, wie du es am besten der Öffentlichkeit zugänglich machen kannst? Das Pferd von hinten aufzuzäumen bringt dich nicht wirklich weiter.

Iteranium
06-07-2010, 10:33
Momentan arbeite ich an einem kleinen Programm, das meine Dateien durchsucht. In meinen Bilddateien habe ich per bilddabei#meinname.jpg mit "#name" angegeben, wer auf dem Bild zu sehen ist. Das Programm soll alle Bilder durchgehen, nach diesen Markierungen suchen und mir dann eine Liste der Personen liefern, zusammen mit einer Anzahl der Bilder.

Wenn das dann steht, wollte ich das ganze noch ein klein wenig ausbauen, so dass man dann in einer graphischen Oberfläche je ein zufälliges Bild jeder Person sieht und so die ganze Bevölkerung auf dem Rechner sehen kann. So wie im aktuellen iPhoto das gemacht ist.

Das an sich hätte ich in wenigen Minuten mit PHP fertig, mit Java bräuchte ich etwas länger, aber im Prinzip sollte ich das auch hinbekommen. Beide Sprachen sind aber nur etwas unpraktisch, wenn ich das ganze als natives Programm haben möchte. Von daher würde ich das jetzt mal mit C probieren. Wahrscheinlich ginge es auch einfach mit find egrep.

Die Geschichte mit einem Repository ist sehr langfristig angedacht, aber ich wollte es schon mal ausprobieren. Wirklich erwarten, dass irgendwer meine Software benutzt, tue ich nicht, aber so kann ich immerhin Updates unkompliziert auf alle Rechner bekommen.

Berufspenner
06-07-2010, 11:40
Mh, was versprichst du dir denn genau von einem Programm, das "nativ" bezüglich eines Systems ist? Wenn du das Programm grundsätzlich sowieso erstmal für den Eigengebrauch entwickelst, dann sollte alles weitere erstmal eine Frage deines persönlichen Geschmacks sein. Also in welcher Sprache und mit welchen Bibliotheken du am liebsten auf welchem System arbeitest. Alles weitere ist zweitrangig. Legst du es jetzt aber darauf an, dein Programm möglichst portabel zu gestallten, ist natürlich wichtig, dass du entweder vollkommen systemunabhängig arbeiten kannst oder eben eine Bibliothek oder ein Framework verwendest, das auf allen gängigen Systemen lauffähig ist.

Was scheinbar deinen Antrieb darstellt, ist etwas dazwischen, die Motivation ist aber, zumindest meiner Meinung nacht, nicht sinnvolle. Willst du eine neue Sprache lernen und ein solches Projekt damit realisieren, dann sieht die Sache ja schon wieder ganz anders aus. Aber dem ganzen an höchster Priorität auf die Fahne zu schreiben, es soll "nativ" sein, halte ich nicht für sinnvoll.

Btw, ich meine mal gelesen zu haben, dass du PHP auch als ganz normale Skriptsprache mittels Interpreter auf deinem System nutzen kannst, also ohne Webserver.

jeebee
06-07-2010, 12:51
Ah, jetzt wo du Java erwähnst kommt mir wieder in den Sinn, dass ich vor ein paar Monaten mal mit den GTK+-Bindings für Java rumgespielt habe... Das hat auch ein natives GNOME Look&Feel ergeben (http://java-gnome.sourceforge.net/)

btw: es gibt auch GTK+ für PHP (http://gtk.php.net/), hab ich allerdings noch nie gebraucht.

John W
06-07-2010, 13:03
Also, auf meinem System (Ubuntu 10.04) reicht für ein an das System angepasstes Java-L&F der Aufruf von "UIManager.setLookAndFeel(UIManager.getSystemLookAn dFeelClassName());" vollkommen aus.

Iteranium
06-07-2010, 22:26
Vielleicht gehe ich da etwas zu ideologisch/dogmatisch an die Sache ran. Das Projekt soll letztlich als Lernprojekt für die Sprache C oder C++ sein. Auch wenn das Programm für den Eigengebrauch ist, soll es nicht nur irgendwie zusammengebastelt sein. Ich könnte zwar mit PHP oder Java das Programm umsetzen, aber dann hätte ich entweder immer einen Webserver/Interpreter laufen, oder eben die Java VM laufen. Das Programm soll aber ganz ehrlich und bodenständig einfach alleine laufen können.

Java ist zwar eine nette Sprache und funktioniert meistens, aber irgendwie geht sie mir dann doch teilweise echt auf den Geist. Wobei ich doch merken musste, dass in Java einiges deutlich einfacher als in C geht –*oder ich bin in C einfach zu doof dazu. PHP ist auch nett, aber für einen lokalen Rechner empfinde ich sie als unpassend.

Von daher würde ich das gerne in C oder C++ programmieren, wie tausende andere Programme auch programmiert werden.

Berufspenner
07-07-2010, 08:31
Schau, jetzt sieht die ganze Sache doch schon ganz anders aus. Du hast eine Idee, die du umsetzen und in diesem Zusammenhang auch gleich eine neue Sprache lernen möchtest. Das sind doch schonmal ganz andere Rahmenbedingungen. Einen hohen Anspruch kann man an das ganze Projekt dann auch ruhig haben, vorallem in Sachen Codegestaltung. Wobei schöner Code ja auch immer eine Frage der Erfahrung ist. Alles weitere ist dann relativ. Viel Spaß und Erfolg dabei.

RHBaum
13-07-2010, 12:50
Ich habe das immer so verstanden, dass C quasi tot ist und jetzt alles in C++ gemacht wird.
C++ ist eine weiterentwicklung von C, also C lebt (mit ein paar wenigen Modifikationen) in C++ weiter.
C, bzw der C Anteil im C++, hat aber einen wesentlichen Vorteil: Er ist viel genauer, und vor allem binaer spezifiziert.
Das heisst, das C Strukturen, pointer, typen .... zueinander compilerunabhaengig sind, waehrend bei c++ dem compiler viel mehr freiheit wegens optimierungen gelassen wird.

Im Klartext heisst das, das alles was ueber compilergrenzen gehen soll, C sein muss, waehrend man bei c++ einen compiler definieren muesste.

Betrifft also Hauptsaechlichst API's von OS, und Bibliotheken, die Compiler / Sprachunabhaengig sein sollen(die meisten Sprachen unterstuetzen C-Schnittstellen).
Also Momentan geht ohne C ned viel. Das wird solange dauern, bis irgendwann mal eine ebenfalls performante und vor allem binaer spezifizierte Sprache sie abloesen wird. (der druck iss allerdings gering, da c seine pflicht tut ).

Ciao ...

locus vivendi
13-07-2010, 15:06
C++ ist eine weiterentwicklung von C, also C lebt (mit ein paar wenigen Modifikationen) in C++ weiter.
C, bzw der C Anteil im C++, hat aber einen wesentlichen Vorteil: Er ist viel genauer, und vor allem binaer spezifiziert.
Das heisst, das C Strukturen, pointer, typen .... zueinander compilerunabhaengig sind, waehrend bei c++ dem compiler viel mehr freiheit wegens optimierungen gelassen wird.
Tatsache ist, dass mehr C Compiler einem gemeinsamen ABI (Application Binary Interface) folgen, als C++ Compiler. Es ist jedoch nicht richtig zu sagen, dass das Binärinterface von C Programmen Compilerunabhängig wäre, oder das der C Standard ein ABI spezifiziert. Kategorisch betrachtet gibt es da keinen Unterschied zwischen C und C++.

Es ist ebenfalls falsch, dass es kein gemeinsames ABI für C++ gäbe. Zumindest für Linux Rechner ist das Itanium C++ ABI die verbreitete Konvention (auch für nicht-Itanium Rechner). Es ist derzeit mindestens vom GCC, vom Intel C++ Compiler, vom Pathscale Compiler und vom Open64 Compiler implementiert. Möglicherweise soll auch der in der Entwicklung befindliche Clang Compiler diesem ABI unter Linux folgen. Das deckt schon einmal eine ganze Menge ab. Nicht kompatibel ist glaube ich der Compiler von Comeau.

Auf Macosx werden die C++ Compiler sicherlich auch einem gemeinsamen ABI folgen - zumindest GCC und Clang.

Wichtig ist auch, das die ABI Kompatibilität sowohl bei C als auch bei C++ im Prinzip nur den Kern der jeweiligen Sprache abdeckt. Wenn man z.B. C FILE* Objekte Implementierungsübergreifend verwenden möchte wird man wohl nicht Erfolg haben.

Wegen all dem stimmt das hier also nicht:

Im Klartext heisst das, das alles was ueber compilergrenzen gehen soll, C sein muss, waehrend man bei c++ einen compiler definieren muesste.

RHBaum
14-07-2010, 11:05
Es ist ebenfalls falsch, dass es kein gemeinsames ABI für C++ gäbe. Zumindest für Linux Rechner ist das Itanium C++ ABI die verbreitete Konvention
wenn ich nen Linux auf nen anderen systemcompiler umstelle, tausche ich soweiso die ganzen c/c++ libs aus.
Seit wann gibts dieses ABI ? Meine letzten versuche mit gentoo vor paar jahren haben auch ergeben, das die mit dem gcc kompilierte c++ standard lib ned mit dem intel harmoniert ....
Mag sein das eine C++ ABI angestrebt wird, aber verwendung und verbreitung imho hat sie noch ned so erlangt IMHO.
Unter linux auch eher ned so drastisch, durch den systemcompiler.
Unter windows eher kritisch, da man da eher nur binaries ausliefert und der compiler ned so vorgeschrieben iss.


Wenn man z.B. C FILE* Objekte Implementierungsübergreifend verwenden möchte wird man wohl nicht Erfolg haben.

Greifst du denn auf die FILE Struktur selber zu ?
Noe, denk du laest das alles die clib machen.
Wenn du es schaffst, den GCC und den Intel Compiler die selbe clib und die selben c-header zu verwenden, solltest auch FILE Strukturen austauschen koennen.

Aber alles sehr theoretisch, zumindest fuer mich ... hab unter linux eh lange nix mehr gemacht.
Hasst Du ein Linux laufen, und optional nen 2ten (c/c++)compiler drauf, mit dem du auch projecte uebersetzt ?

Ciao ...

locus vivendi
14-07-2010, 13:27
Seit wann gibts dieses ABI ?
Seit circa 2001: http://www.codesourcery.com/public/cxx-abi/


Meine letzten versuche mit gentoo vor paar jahren haben auch ergeben, das die mit dem gcc kompilierte c++ standard lib ned mit dem intel harmoniert ....
Genau, das hatte ich ja schon geschrieben. Die jeweiligen ABIs spezifizieren nur die Kernsprache + etwas Runtime Support (z.B. type_info).

Immerhin entnehme ich der Intel C++ Online-Dokumentation, dass dieser Compiler die GNU C++-Bibliothek benutzen kann, und unter dieser Voraussetzung Code kompatibel zu GCC produziert. Also eine Situation ganz ähnlich zu der von C.


Mag sein das eine C++ ABI angestrebt wird, aber verwendung und verbreitung imho hat sie noch ned so erlangt IMHO.
Wenn man z.B. einen aktuellen GCC verwendet, benutzt man dieses ABI automatisch.


Aber alles sehr theoretisch, zumindest fuer mich ... hab unter linux eh lange nix mehr gemacht.
Hasst Du ein Linux laufen, und optional nen 2ten (c/c++)compiler drauf, mit dem du auch projecte uebersetzt ?
Ich verwende derzeit nur den GCC. Insofern ist das auch für mich nur theoretisch. Ich glaube aber z.B. der Intel-Doku zunächst mal. Klar ist natürlich auch, das man umso mehr Probleme erwarten kann, je mehr Sprachfeatures man verwendet. Vielleicht nehme ich diesen Thread ja mal zur Gelegenheit um tatsächlich mal den Intel Compiler auszuprobieren.

Oder ich gebe die Frage weiter: Hat irgendein Forenmitglied hier praktische Erfahrung damit unterschiedliche C++ Compiler zu verwenden, und kann aus eigener Anschauung etwas zur Interoperabilität sagen? Natürlich halbwegs aktuelle Erfahrung, also zumindest nach 2001.

P.S.: Mir fällt noch ein, der C++ von Sun ist ebenfalls *nicht* ABI kompatibel zum GCC unter Linux, meines Wissens nach.

RHBaum
15-07-2010, 06:07
Was auch intressieren wuerde:
Es gibt paar wenige Flags auch fuern gcc, die die binaere Ausrichtung der Daten bei Klassen und Parameterausrichtung in den Aufrufen etc ... beeinflussen, also ein Klasseninterface selbst bei gleicher version des gcc binaeruncompatibel machen.
Werden diese Flags spezifiziert oder zumindest verboten ?
oder gibts fuer diese Dinger Neue Compileranweisungen die diese Flags an bestimmten Interfaces aussetzen oder ne Proxyklasse generieren etc ...

Ciao ...