Ich muss diese 2 Fakten in Einklang bringen:
- Ich fühle mich nicht wohl, wenn ich unter Linux arbeite.
- Ich muss Software für Linux entwickeln.
Einige Hintergrundinformationen: Ich habe über 10 Jahre Programmiererfahrung unter Windows (fast ausschließlich C / C ++, aber auch .NET). Ich war ungefähr 3 Jahre lang ein Benutzer von FreeBSD zu Hause (dann musste ich zurück zu Windows), und ich hatte noch nie viel Glück mit Linux. Und jetzt muss ich Software für Linux entwickeln. Ich brauche einen Plan.
Unter Windows müssen Sie lediglich eine Programmiersprache, eine API, mit der Sie programmieren, sowie Ihre IDE (VisualStudio) und einige grundlegende Tools zur Fehlerbehebung (Depends, ProcessExplorer, DebugView, WinDbg) kennen. Alles andere kommt natürlich.
Unter Linux ist das eine ganz andere Geschichte. Wie zum Teufel würde ich wissen, welche DLL (sorry, Shared Object) geladen würde, wenn ich vom Firefox-Plugin darauf verlinke? Was ist das Linux-Äquivalent zum Einfügen von __asm int 3 / DebugBreak () in den Quellcode und zum Ausführen des Programms und zum anschließenden Aufrufen eines Debuggers durch das Betriebssystem? Warum verwenden die Höllen-Release-Builds etwas, das als AppLoader bezeichnet wird, während Debug-Builds irgendwie anders funktionieren? Das Schlimmste von allem: Wie wird eine Linux-Entwicklungsumgebung bereitgestellt?
Was würden Sie empfehlen, wenn man bedenkt, dass Hass normalerweise damit verbunden ist, nicht genug zu wissen? Ich bin in Ordnung mit Emacs und GCC. Ich muss mich als Linux-Administrator / -Nutzer ausbilden und die richtigen Tools zur Fehlerbehebung lernen (strace ist cool, übrigens), die denen entsprechen, die ich oben erwähnt habe.
Muss ich Linux von Grund auf neu installieren? Oder muss ich nur ein paar Bücher lesen (ich habe "UNIX Programming Environment" von Kernighan und "Advanced Programming ..." von Stevens gelesen, aber ich muss etwas Praktischeres lernen)? Oder muss ich eine Linux-Distribution auf meinem Heimcomputer haben?
man
ist dein Freund. Ich würdeman nm
undman ld
als Ausgangspunkt.Antworten:
Möglicherweise finden Sie den Artikel Dynamic Linking unter Linux und Windows interessant, in dem erläutert wird, wie jedes Betriebssystem Dynamic Linking ausführt. Der Artikel Suchpfade für gemeinsam genutzte Bibliotheken erläutert, wie die Bibliotheken gefunden werden. Auch statische, gemeinsam genutzte dynamische und ladbare Linux-Bibliotheken sind sehr gut. Eine nette Sache an Linux-Bibliotheken ist, dass sie eine bessere Unterstützung für die Versionierung haben und mehrere Versionen einer Bibliothek haben als Windows (AFAIK, ich mache kein Windows). Siehe hierzu Versionierung der Bibliotheksschnittstelle in Solaris und Linux . Diese Artikel sollten Sie wirklich mit Bibliotheken decken.
Die GDB ist sehr mächtig, eine gute Einführung ist wahrscheinlich das gdb Tutorial von RMS . Möglicherweise möchten Sie sich über bedingte Haltepunkte informieren. Entsprechende Informationen finden Sie in
__asm(int 3)
der Frage Festlegen von Haltepunkten in C- oder C ++ - Code programmgesteuert für gdb unter Linux .Das Buch Advanced Unix Programming von Marc Rochkind ist meiner Meinung nach ein Muss. Hat viele Beispiele und deckt alle POSIX / SUS-Themen sehr gut erklärt ab. Es ist das beste Buch zu diesem Thema, das ich bisher gelesen habe.
Aber um dir das Leben zu erleichtern, empfehle ich, eine High-Level-API zu verwenden, die Dinge wie Qt für dich abstrahiert. Erleichtert das plattformübergreifende Schreiben erheblich.
Wenn Sie Linux von Grund auf neu erstellen, können Sie sich ein Bild davon machen, wie ein Linux-System aufgebaut ist, aber ich denke, es verbessert Ihr Wissen darüber aus Entwicklersicht nicht wesentlich. Es macht Sie jedoch mit Linux wohler, da Sie lernen, welche Teile in einer Linux-Umgebung vorhanden sind (und teilweise auch warum ). Ein Linux wird für Sie keine große Blackbox, nachdem Sie Linux From Scratch durchgearbeitet haben.
quelle
Wenn Sie möchten
strace
, vergessen Sie nichtltrace
: das Äquivalent für Bibliotheksaufrufe.Außerdem empfehle ich Linux From Scratch . Es ist eine gute Übung, um die Kernelemente des Betriebssystems herauszufinden und wie sie zusammenpassen.
Für eine moderne, vollständige Referenzbehandlung für die Systemprogrammierung würde ich empfehlen, die Linux-Programmierschnittstelle zu verwenden .
quelle
Der Mac OS X ist wie ein Mercedes. es ist das schönste und sauberste, aber es kostet viel. Windows ist wie ein Toyota; es wird dich hin und zurück bringen.
Linux ist wie ein Hot Rod; Es ist für die Menschen zu graben und auseinander zu nehmen und wieder zusammenzusetzen. Linux ist nichts für jemanden, der nur den Computer benutzen möchte. Es ist für Leute, die Computer lieben. Leute, die Computer nicht lieben, sollten sich davon fernhalten.
Die Dinge, die Sie in Windows gelernt haben, lassen sich nicht sehr gut übersetzen, nein. Aber du siehst die Einbauten und siehst zu, wie der Motor läuft.
Versuchen Sie, Linux als neues Spielzeug zu nehmen, mit dem Sie spielen und darin kriechen können, um zu sehen, was los ist. Was unter Windows einfach ist, ist unter Linux schwieriger. Dinge, die unter Windows unmöglich sind, sind unter Linux möglich.
Wenn Sie Computer lieben, können Sie Linux lieben. Wenn Sie Computer nicht lieben, warum programmieren Sie überhaupt?
quelle
Wie wäre es, wenn Sie mit Monodevelop auf Mono entwickeln? Dies würde Ihnen den Einstieg erleichtern, indem Sie Ihre Erfahrungen in .NET wiederverwenden.
quelle
Es ist einschüchternd, wenn man es von Anfang an betrachtet (genau wie wenn man als Linux-Entwickler mit der Entwicklung von Windows beauftragt wäre). Ich würde dieses eine Problem nach dem anderen angehen.
Am wichtigsten ist, lassen Sie alle Ihre subjektiven Meinungen an der Tür. Und nein, Sie müssen kein Guru sein, um sich unter Linux zu entwickeln. Ich weiß genug, um herumzukommen, und nicht alles - aber ich fühle mich damit wohl ...
quelle
The success or failure of many thing in life comes down to our attitude, looking for positives and keeping your mind focused on the positives will do more to adide you as you start down this new interesting adventure.
Wie lange haben Sie gebraucht, um sich in einer Windows-Umgebung zurechtzufinden? Man könnte sagen, es war einfach, als du gerade angefangen hast. Aber Sie hatten vorher ein paar Jahre mit Fenstern zu tun. Wie lange haben Sie Windows verwendet, bevor Sie Ihr erstes Programm geschrieben haben? Es waren 8 Jahre für mich, obwohl ich jetzt fast ausschließlich Linux für 5 Jahre benutze. Ich beherrsche Linux jetzt besser als Windows. Sie sollten sich mindestens so viel Zeit nehmen, um sich mit einem neuen System vertraut zu machen.
Beginnen Sie mit der Liste der Anwendungen, mit denen Sie in Windows nicht leben können, und suchen Sie nach Alternativen in der * nix-Welt. http://alternativeto.net/ und die Wikipedia weiterführende Abschnitte können hier hilfreich sein.
Hier ist eine Liste alternativer Software, die sich als sehr nützlich erweisen könnte. Hier sind einige Alternativen zu den von Ihnen erwähnten Dingen.
Weitere nützliche Ressourcen beim Wechsel von einem System zu einem anderen
Werfen Sie einen Blick auf diese Ressourcen, um ein besserer Hauptbenutzer oder Administrator zu werden
Es klingt auch so, als ob es eine Weile her ist, dass Sie sich die * nix-Welt angesehen haben. Ich würde einige der neuen Distributionen von Fedora , Suse , Debian oder meiner bevorzugten Workstation Ubuntu empfehlen .
Sie können jetzt wahrscheinlich davonkommen, ohne die Interna des Systems und nur die Grundlagen wie in Windows zu kennen. Ich würde nicht einfach versuchen, mit dem Minimum davonzukommen. Wenn Sie Linux als Tool betrachten, das Sie tatsächlich bei Ihrer Entwicklung unterstützt, und nicht nur als Betriebssystem, in dem Sie es entwickeln, wäre es hilfreich.
Linux From Scratch wird viel wichtiger sein, wenn Sie speziell für Linux entwickeln, und dies ist ein sehr spezifischer und technischer Sinn. IE, das Sie für den Kernel oder den Port, auf dem Sie programmieren, auf einem Supercomputer mit Linux entwickeln möchten. Es wäre trotzdem sehr nützlich. Ich denke, Sie könnten das wahrscheinlich für ein paar Monate lassen, während Sie nur versuchen, in Ubuntu loszulegen. Ubuntu wird so nah wie möglich an der Arbeitswelt von Mac und Windows sein.
quelle
Ich denke, Sie haben Ihre Frage in der Frage beantwortet:
"Unter Windows müssen Sie lediglich eine Programmiersprache, eine API, mit der Sie programmieren, Ihre IDE (VisualStudio) und einige grundlegende Tools zur Fehlerbehebung (Depends, ProcessExplorer, DebugView, WinDbg) kennen. Alles andere ist selbstverständlich. "
Ratet mal, unter Linux müssen Sie lediglich eine Programmiersprache, eine API (oder ein paar), Ihre IDE (Eclipse oder NetBeans, sogar Geany, Emacs oder vim, wenn Sie möchten) und einige grundlegende Tools zur Fehlerbehebung kennen ( gdb, nachverfolgungswerkzeuge, fussel, htop, ps).
Sie haben viel Wissen in das Windows-Programmier-Ökosystem investiert. Vieles davon ist (hoffentlich) abstraktes Wissen (was ist ein Compiler, ein Debugger, eine gemeinsam genutzte Bibliothek, ein Prozess, ein Thread? Was machen sie?), Das sich leicht übersetzen lässt, sobald Sie mit den verschiedenen Tools vertraut sind. Einige sind domänenspezifisch (Welche DLL ist verknüpft, wenn ich einem Projekt X hinzufüge?), Aber selbst das Wechseln von einer Sprachklasse in eine andere in Windows erfordert einige neue Lernschritte.
Installieren Sie Ubuntu oder Fedora in einer VM, lesen Sie einige C ++ Hello World in Eclipse- oder NetBeans-Tutorials und führen Sie ein Debugging in Eclipse / NetBeans-Tutorials durch, und lassen Sie die natürliche Anpassungsfähigkeit Ihres Gehirns übernehmen. Es übersetzt Ideen für Sie, wenn Sie sich entspannen und es einfach zum Laufen bringen.
quelle
Ich habe Unix im Allgemeinen gelernt, indem ich die Manpages gelesen habe. Sie sollten sie zumindest überfliegen. Ja, ich meine alle. Die Methode, die ich verwende, um in die Manpage-Verzeichnisse zu cden und sie abschnittsweise anzugreifen.
Ich benutze das:
... Ersetzen Sie die .1 durch die Nummer des Abschnitts, den Sie gerade lesen, .2, .3 usw. Drücken Sie Strg-Z Strg-C, um die Schleife zu verlassen. Ihr Kilometerstand kann variieren, wenn Ihre Linux-Distribution Dinge anders speichert, dh nicht als cmdname.1.gz.
Gehen Sie einfach die Beschreibungen durch und mehr, wenn es etwas Interessantes ist. Die Abschnitte 1, 2 und 3 sind für einen Programmierer am wichtigsten. 1 behandelt allgemeine Benutzerbefehle, einschließlich Ihrer Kompilierungswerkzeuge, und verschiedene Forensik-Dienstprogramme. 2 sind Systemaufrufe und 3 sind Bibliotheksaufrufe.
quelle
xman
als "freundlicher" Schnittstelle zu starten. Wählen Sie einen Abschnitt aus, klicken Sie auf die Manpage und lesen Sie sie. Spülen, wiederholen.Zwingen Sie sich nicht dazu, etwas zu tun, das Sie nicht mögen. Verwenden Sie Windows als Entwicklungsumgebung, schreiben Sie einen portablen Code, kompilieren Sie ihn für Linux und testen Sie ihn nur gelegentlich in einer VM.
quelle
Ich bin mir nicht sicher, ob es für Plattformen funktioniert, aber für Programmiersprachen. Ich fand es hilfreich, darüber nachzudenken, wie ich mich mit denjenigen, in denen ich gut bin, vertraut gemacht und mich damit vertraut gemacht habe, und zu versuchen, diese Erfahrungen und Aktivitäten für das, was ich tue, noch einmal abzuspielen. Ich versuche zu lernen.
Vielleicht etwas in diesen Zeilen?
Generell gesehen ist mein Interesse und Vertrauen in GNU / Linux dadurch gewachsen, dass es viel bastelbarer ist (und in den Anfangszeiten noch bastelbedürftiger ist) als Windows. Ich musste mit vielen Dingen herumspielen, um die Dinge zum Laufen zu bringen, und das half mir, viele Dinge zu lernen. Die Dinge sind jetzt viel besser, aber all diese Stunden haben geholfen.
quelle
Ich war einer von zwei, die mit etwas Ähnlichem, aber anderem beauftragt waren. Ich arbeite in einem K-12-Schulbezirk und das Geschäftssystem (HR, Finanzen usw.) wird von einer HP3000 / TurboImage-Datenbank auf eine Linux / MS SQL-Plattform migriert. Ich bin mit der MS SQL-Seite vertraut. Aber nicht die Linux-Seite. Wir beide sind auf der Admin-Seite, nicht auf der Programmierseite. Die Programmierung erfolgt außerhalb - 3rd-Party-Business-App für K-12-Organisationen.
Ich nahm an Wochenenden an einem 5-wöchigen Einführungskurs in Linux (Redhat) teil - hauptsächlich im Befehlszeilenmodus - und es hat sich für mich als schneller Einstieg in die Linux-Arbeitsweise gelohnt. Offensichtlich YMMV je nach Klasse / Lehrer.
Sie haben "Das Schlimmste von allem: Wie wird eine Linux-Entwicklungsumgebung bereitgestellt?" Da Sie mit Windows bereits sehr vertraut sind, empfehle ich dringend, eine Kopie von vmWare Workstation zu erwerben. Damit können Sie Windows als Workstation behalten und Linux als Gastsystem installieren - löschen, spülen und nach Bedarf wiederholen. Wenn Sie ein gutes Setup haben, können Sie einen Snapshot erstellen, aber ich kann nicht genau sagen, welche Versionen den Snapshot-Aspekt unterstützen. Und wenn Sie die vmWare Workstation-Route wählen, um mehrere Entwicklungs-Setups zu aktivieren, erhöhen Sie auf jeden Fall den Speicher.
Es macht mir auch nichts aus, CentOS als Linux-Betriebssystem für die Gäste zu empfehlen. Soweit ich weiß, ist es wie bei RedHat, ohne das Branding und / oder die Verkaufsargumente und / oder die Supportkosten. Ich bin mit den anderen Linux-Varianten nicht vertraut und kann daher keine Eingaben dazu machen.
Greg
quelle
Ich mag beide Plattformen und trotz der Unterschiede in der Benutzeroberfläche und im Entwicklungs-Ökosystem finde ich sie ähnlicher als anders. Tatsächlich können Sie für die meisten Windows-Konzepte äquivalente Linux-Konzepte finden, indem Sie einfach im Internet suchen.
Trotzdem empfehle ich dringend, zu lernen, wie man Dinge auf "Unix-Weise" macht. Verwenden Sie die Befehlszeile anstelle von fehlerhaften GUI-Frontends (ich spreche hier hauptsächlich von GDB). Suchen Sie nicht nach einer IDE und lernen Sie stattdessen, wie Sie eine Reihe spezialisierter Tools verwenden. Wählen Sie einen guten Editor (der auf vim zeigt) und lernen Sie es gut. Lesen Sie, wie es
make
funktioniert, auch wenn Sie nicht vorhaben, Experte zu werden. Vielleicht magst du sogar Linux. Es ist Geek-freundlich und macht Spaß, damit zu spielen.quelle
Bedenken Sie Folgendes: Sie haben einmal nichts über Windows gewusst, es aber gelernt und sich im Laufe der Zeit damit angefreundet.
Dann änderte MS das Programmiersystem, mit dem Sie vertraut waren, auf .NET und Sie wussten nichts mehr über DLLS, COM und was auch immer, Sie mussten Dinge wie Assemblys, GACs und Anwendungsdomänen lernen. Du hast das ok gelernt.
Warum machen Sie sich jetzt Sorgen, dasselbe mit Linux zu tun?
Es gibt jede Menge Tutorials im Internet, mit denen Sie loslegen können, und zwar für alle Arten von Programmierumgebungen. Jetzt sagst du GCC, also gehe ich von der C ++ - Entwicklung aus. Holen Sie sich Eclipse, installieren Sie das CDT (c dev tools) auf Ihrer Eclipse-Plattform (Eclipse ist eine Mehrzweck-IDE, Sie können es für C ++, PHP, Java usw. verwenden, aber Sie müssen das Tool für Ihre Sprache installieren da du nicht wirklich willst, dass alles wie bei VS vorinstalliert ist und es 3 Tage dauert, bis es installiert ist :))
Es gibt benutzerfreundliche Tutorials im ganzen Web. IBM hat hier eine , die ziemlich umfassend ist.
Debugging-Tools ... eclipse hat es eingebettet ( Tutorial ), aber Sie können viele Tools finden, wie die, die Sie erwähnt haben. Durchsuchen Sie einfach das Web und Sie werden viele Optionen finden. Es wird eine Weile dauern, bis Sie herausgefunden haben, wie ein Core-Dump gelesen wird (im Gegensatz zu einem Windows-Userdump zum Beispiel), aber Sie werden dorthin gelangen.
Es könnte sich auch lohnen, ein Blog mit Ihren Erfahrungen zu beginnen. Sie können sich nicht nur daran erinnern, was Sie getan haben (z. B. Einrichten von Eclipse, wie es Ihnen gefällt, Sie werden vergessen, wenn Sie es in einem Blog erneut tun müssen Jahr), aber es wird anderen in Ihrer Situation helfen.
quelle
Ich glaube nicht, dass Sie Linux von Grund auf neu machen müssen. Wenn ich du wäre, würde ich mich für Ubuntu entscheiden. Es ist komfortabler und da es auf Debian basiert, gibt es genügend technisches Material.
Wenn Sie sich mehr mit Linux beschäftigen möchten, ist Gentoo eine gute Option. Es erfordert, dass Sie viel über Konfiguration und Kernel lesen, aber es gibt Ihnen auch ein funktionierendes System, in dem Sie arbeiten können
quelle
Google "Die Kunst der Unix-Programmierung" und lesen Sie es. IMO, Ihre Hauptschwierigkeit ist die unterschiedliche Philosophie, und dieses Buch ist eine ausgezeichnete Lektüre dafür.
Außerdem lernen Sie einige nicht offensichtliche, aber technisch sehr wichtige Unterschiede zwischen * n * x- und Windows-Systemen kennen. Dies ist der Schlüssel zum Verständnis, warum eine andere Vorgehensweise unter Linux sinnvoll ist.
quelle
Die erste Frage, die ich stellen möchte, lautet: Was möchten Sie entwickeln? Wenn es sich um eine GUI-basierte Anwendung handelt, kann dies etwas anderes sein als das Schreiben einer Kernel-Erweiterung.
Im Fall einer GUI-App ist die einfachste Methode die Verwendung von Qt, das über eine eigene Entwicklungsumgebung (Qt-Creator) verfügt und es Ihnen ermöglicht, plattformübergreifend nur eine API zu erlernen, die für Windows / Linux verwendet werden kann / OSX und sogar mobile Entwicklung. Wie in Visual Studio unter Windows oder XCode unter OSX können Sie Fenster und Elemente in einem grafischen Editor erstellen und layouten. Die API ist mit zahlreichen Beispielanwendungen sehr einfach zu erlernen.
Wenn Sie eine niedrigere Version benötigen, können Sie, sobald Sie sich in der Befehlszeile mit Linux auskennen, Verzeichnisse durchlaufen, Dateien bearbeiten, Berechtigungen usw. verstehen. Lesen Sie dann entweder, wie Sie ein einfaches Programm mit gcc kompilieren. wie man Dateien verknüpft und die ausführbare Datei ausführt und wie man dann mit gdb debuggt.
Alternativ können Sie Eclipse oder eine andere IDE herunterladen, wenn dies ein wenig entmutigend erscheint. Langfristig werden Sie sich jedoch wahrscheinlich mit Linux wohler fühlen, wenn Sie Zeit und Mühe in die Befehlszeile stecken.
quelle