it-swarm-eu.dev

přesun z Windows na Linux

Musím sladit tato dvě fakta:

  1. Necítím se pohodlně pracovat na Linuxu;
  2. Potřebuji vyvinout software pro Linux.

Nějaké pozadí: Mám více než 10 let zkušeností s programováním ve Windows (téměř výhradně C/C++, ale také některé .NET), byl jsem uživatelem FreeBSD doma asi 3 roky (pak jsem se musel vrátit zpět k Windows) a nikdy jsem neměl s Linuxem hodně štěstí. A teď musím vyvinout software pro Linux. Potřebuji plán.

V systému Windows se můžete zbavit pouhého znát programovací jazyk, API, proti kterému kódujete, své IDE (VisualStudio)) a některé velmi základní nástroje pro odstraňování problémů (Závisí, ProcessExplorer, DebugView, WinDbg) Všechno ostatní přichází přirozeně.

V systému Linux je to velmi odlišný příběh. Jak bych sakra věděl, co by se DLL (omlouvám se, sdílený objekt) načítalo, kdybych na něj odkazoval z pluginu Firefox? Jaký je ekvivalent Linuxu k vložení __asm ​​int 3/DebugBreak () do zdroj a spuštění programu, a pak nechat OS volat debugger? Proč build hell release používá něco, tzv. appLoader, zatímco debug builds fungují nějak jinak? Nejhorší ze všeho: jak zajistit vývojové prostředí Linuxu?

Co byste tedy doporučil, vezmeme-li v úvahu, že nenávist je obvykle spojena s nevědomím toho dost? Jsem v pořádku s Emacsem a GCC. Musím se vzdělávat jako administrátor/uživatel Linuxu a musím se naučit správné nástroje pro odstraňování problémů (stopa je v pohodě, btw), ekvivalenty těm, které jsem zmínil výše.

Musím udělat Linux od nuly? Nebo si musím jen přečíst nějaké knihy (četl jsem „KIXighanské programovací prostředí UNIX“ a „Pokročilé programování ...“ od Stevense, ale musím se naučit něco praktičtějšího)? Nebo musím mít nějaké domácí distro na svém domácím počítači?

57
rincewind

Možná najdete článek Dynamic Linking v Linuxu a Windows zajímavý, který vysvětluje, jak každý OS dynamicky propojuje. Článek Vyhledávací cesty sdílené knihovny vysvětluje, jak jsou knihovny nalezeny. Také Statické, sdílené dynamické a načítatelné Linux knihovny je velmi dobré. Pěkná věc o knihovnách Linux je, že mají lepší podporu pro vytváření verzí a mají kolem sebe několik verzí knihovny než Windows (AFAIK, nedělám Windows). Viz Verze rozhraní knihoven v systémech Solaris a Linux . Tyto články by vás měly opravdu dostat pokryté knihovnami.

GDB je velmi mocný, dobrý úvod je pravděpodobně RMS's gdb Tutorial . Možná budete chtít číst za podmíněných bodů přerušení. Pro ekvivalenty k __asm(int 3) viz otázka Nastavit bod zlomu v C nebo C++ kódu programově pro gdb v Linux .

Kniha Advanced Unix Programming od Marca Rochkinda je nutností číst, IMHO. Má spoustu příkladů a pokrývá všechna témata POSIX/SUS velmi dobře vysvětleným způsobem. Je to nejlepší kniha o tomto tématu, kterou jsem doposud četl.

Ale abych vám usnadnil život, doporučuji používat API vysoké úrovně, které vám prohledává věci jako Qt. Také výrazně usnadňuje psaní napříč platformami.

Dělat Linux od nuly vám pomůže pochopit, jak je systém Linux složen, ale myslím si, že to hodně nezlepšuje vaše znalosti o něm z pohledu vývojářů. Udělá vám to však pohodlnější pro Linux, protože se dozvíte, jaké části jsou v prostředí Linuxu (a částečně také proč )). Po práci v systému Linux From Scratch pro vás nebude Linux velkým blackboxem.

62
DarkDust

Pokud se vám líbí strace, nezapomeňte ltrace : ekvivalent volání knihoven.
Také ano, doporučuji Linux From Scratch . Je to dobré cvičení při vypracování základních prvků operačního systému a toho, jak spolu zapadají.
Pro moderní kompletní programování referencí pro programování systému bych doporučil vyzvednout Linux Programming Interface .

16
entropo

Mac OS X je jako Mercedes; je to nejhezčí a nejčistší, ale stojí to hodně. Windows je jako Toyota; dostane vás tam a zpět.

Linux je jako hot rod; Je na lidech, aby se kopali, rozebírali a zase dali dohromady. Linux není pro někoho, kdo chce počítač používat; je to pro lidi, kteří milují počítače. Lidé, kteří nemilují počítače, by se od toho měli držet dál.

Věci, které jste se naučili ve Windows, se nebudou dobře překládat, ne. Ale musíte vidět interní a sledovat chod motoru.

Pokuste se vzít Linux jako novou hračku, se kterou můžete hrát, procházet se a vidět, co se děje. Věci, které jsou ve Windows snadné, jsou v Linuxu těžší; věci, které jsou v systému Windows nemožné, jsou možné v systému Linux.

Pokud máte rádi počítače, můžete milovat Linux; pokud nemilujete počítače, proč vůbec programujete?

12
Andy Canfield

A co vy na Mono s Monodevelop? To by vás začalo docela snadno opakovaným použitím vašich zkušeností v .NET.

9
Johann Blais

Je to skličující, když se na to díváte od samého začátku (stejně jako kdybyste byl vývojář Linuxu pověřený vývojem systému Windows). Řešil bych tento problém najednou.

  • Nejprve si připravte prostředí (kompilátor, IDE - ano, existují, Netbeans/Eclipse atd.)
  • Poté si nainstalujte apis vyšší úrovně (boost/Qt atd.)
  • Začněte pomalu, pokud existuje okamžitý problém, který chcete vyřešit, zkompilujte kód (nebo začněte psát od nuly atd.) Stejně jako byste řešili jakýkoli vývojový projekt, získejte nejprve vše, co znáte, (tj. Věci, které nepotřebují konkrétní OS) interakce), a pak, když narazíte na zádrhel - vyhledávání, jsem si jistý, že někdo tam venku narazil na stejný problém dříve a vyřešil ho.

A co je nejdůležitější, nechte všechny své subjektivní názory u dveří. A ne, nemusíte být guru, abyste se mohli vyvíjet v Linuxu, vím dost na to, abych se obešel, a ne všechno - ale s tím jsem spokojený ...

8
Nim

Myslím, že jste na tuto otázku odpověděli:

„Ve Windows se můžete zbavit pouhého poznání programovacího jazyka, API, proti kterému kódujete, vašich IDE (VisualStudio)) a některých velmi základních nástrojů pro odstraňování problémů (Závisí, ProcessExplorer, DebugView "WinDbg). Všechno ostatní přichází přirozeně."

Hele, co v Linuxu se můžete zbavit pouhého znát programovací jazyk, API (nebo pár), vaše IDE (Eclipse nebo NetBeans, dokonce Geany, Emacs nebo Vim), pokud like) a některé základní nástroje pro odstraňování problémů (gdb, tracing tools, lint, htop, ps).

Do programovacího ekosystému Windows máte mnoho znalostí. Hodně z toho jsou (doufejme) abstraktní znalosti (co je kompilátor, debugger, sdílená knihovna, proces, vlákno? Co dělají?), Které se snadno překládají, jakmile se dostanete k rychlosti různých nástrojů. Některé jsou specifické pro určitou doménu (Co DLL je propojeno, když přidám X do projektu?), Ale i přechod z jedné třídy jazyka do jiné v systému Windows by vyžadoval nějaké nové učení.

Nainstalujte Ubuntu nebo Fedora do VM, přečtěte si některé C++ Hello World v Eclipse nebo NetBeans tutoriálech a některé ladění v Eclipse/NetBeans tutoriálech a nechte svůj mozek přirozenou schopnost přizpůsobit se převzetí. Pokud si odpočinete a jen to uvedete do provozu, převede to pro vás nápady.

6
Justin

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.

Jak dlouho vám trvalo, než jste se stali zdatnými v práci v prostředí Windows. Dalo by se říci, že bylo snadné, že jste právě začali. Ale předtím jste měl několik let práce s okny. Jak dlouho jste používali Windows, než jste napsali svůj pěstní program. Bylo to pro mě 8 let, všechno jsem teď používal Linux téměř výhradně po dobu 5 let. Nyní jsem zdatnější v Linuxu než v Windows. Měli byste si dát alespoň tolik času, abyste se seznámili s novým systémem.

Začněte seznamem aplikací, s nimiž nemůžete žít, v oknech a hledejte alternativy ve světě * nix. http://alternativeto.net/ a další sekce pro čtení na Wikipedii mohou být užitečné zde.

Zde je seznam alternativního softwaru, který by se mohl ukázat jako velmi užitečný. Zde jsou některé alternativy k věcem, které jste zmínil.

Další užitečné zdroje při přechodu z jednoho systému do druhého

O tom, jak se stát lepším výkonným uživatelem nebo správcem, se podívejte na tyto zdroje

Zní to také, jako by to bylo už nějakou dobu, co jste se podívali na svět * nix. Doporučil bych některá nová vydání distros z Fedora , suse , debian nebo z mé preferované pracovní stanice bunt .

Nyní se pravděpodobně můžete dostat pryč, když neznáte vnitřnosti systému a pouze základy jako v systému Windows. Nesnažil bych se jen dostat pryč s minimem. Pokud vidíte Linux jako nástroj, který vám ve vašem vývoji skutečně pomáhá, a ne pouze operační systém, ve kterém jej vyvíjíte, bylo by užitečné.

Linux From Scratch bude mnohem důležitější, pokud se konkrétně vyvíjíte pro Linux je velmi specifický a technický smysl. TJ. chcete se vyvinout pro jádro nebo port, na kterém programujete, do super počítače se systémem Linux. To by bylo velmi užitečné, nikdy méně. Myslím, že byste to asi mohli nechat na pár měsíců, zatímco se pokusíte jít do Ubuntu. Ubuntu bude co nejblíže k věcem, které fungují světu mac a oken.

6
nelaaro

Unix jsem se naučil obecně čtením manuálových stránek. Měli byste je alespoň sbírat. Ano, myslím všechny. Metodu, kterou používám k cd do adresářů na manuálové stránce a k útoku na jednu sekci najednou.

Používám toto:

for i in *; do f=`basename $i .gz`; man `basename $f .1` ; done

... nahrazení . 1 číslem sekce, kterou čtete, .2, .3 atd. Stiskem ctrl-Z ctrl-C se dostanete ven ze smyčky. Počet najetých kilometrů se může lišit, pokud vaše linux distro uloží věci jinak, tj. Ne jako cmdname.1.gz.

Stačí projít popisy a další, pokud je to něco zajímavého. Sekce 1, 2 a 3 jsou pro programátora nejdůležitější. 1 se týká obecných uživatelských příkazů, které zahrnují vaše kompilační nástroje a různé forenzní nástroje. 2 jsou systémová volání a 3 jsou volání do knihovny.

3
Hack Saw

Nenuťte se dělat něco, co se vám nelíbí. Používejte Windows jako vývojové prostředí, psejte přenosný kód, křížový kompilace pro Linux a testujte jej pouze příležitostně ve virtuálním počítači.

3
SK-logic

Byl jsem jedním ze dvou úkolů s něčím podobným, ale odlišným. Pracuji ve školní čtvrti K-12 a obchodní systém (HR, finance atd.) Přechází z HP3000/TurboImage db na platformu Linux/MS SQL. Jsem spokojený se stránkou MS SQL. Ale ne Linux. Oba jsme na straně administrátora, ne na straně programování. Programování se provádí mimo - obchodní aplikace třetí strany pro orgány K-12.

O víkendech jsem absolvoval 5 víkendovou třídu Intro to Linux (Redhat) - dělal jsem to většinou v režimu příkazového řádku - a stálo to za čas, abych rychle skočil do Linuxu, jak dělat věci. Je zřejmé, že YMMV závisí na třídě/učiteli.

Zmínil jste se o „nejhorším ze všech: jak zajistit vývojové prostředí Linuxu?“? Vzhledem k tomu, že jste již s Windows dobře obeznámeni, důrazně doporučujeme, abyste si pořídili kopii vmWare Workstation. Díky tomu můžete systém Windows ponechat jako pracovní stanici a nainstalovat systém Linux jako hostující systémy - podle potřeby odstraňujte, vypláchněte a opakujte. Když dosáhnete dobrého nastavení, věřím, že můžete snímek, ale nemůžu s jistotou říci, které verze jsou schopny snímku. A pokud se vydáte na cestu vmWare Workstation, abyste povolili více vývojových nastavení - rozhodně buďte do paměti.

Také mi nevadí doporučit používání CentOS jako operačního systému Linux pro hosty. Z toho, co jsem pochopil, je to jako RedHat bez brandingu a/nebo prodeje a/nebo nákladů na podporu. Nejsem obeznámen s jinými příchutěmi Linuxu, a proto k nim nemůžu přispět.

Gregu

2
Gregory Thomson

Nejsem si jistý, že to funguje pro platformy, ale pro programovací jazyky, mi připadalo užitečné přemýšlet o tom, jak jsem se seznámil s těmi, se kterými jsem dobře obeznámen, a pokusil se tyto zážitky a aktivity přehrát pro to, co jsem Snažím se učit.

Možná něco na těchto tratích?

Obecně řečeno, můj zájem a důvěra v GNU/Linux přichází tím, že je mnohem více drotárnější (a vyžaduje drotárství v prvních dnech) než Windows. Potřeboval jsem si pohrávat se spoustou věcí, aby věci fungovaly, a to mi pomohlo naučit se spoustu věcí. Věci jsou teď mnohem lepší, ale všechny ty hodiny pomohly.

2
Noufal Ibrahim

Zvažte to: jednou jste o systému Windows nic nevěděli, ale naučili jste se to a postupem času se s ním stalo příjemné.

Poté MS změnilo jakýkoli programovací systém, se kterým jste byli spokojeni, do .NET a už jste nevěděli nic o DLLS, COM a cokoli, museli jste se učit věci jako sestavení, GAC, aplikační domény. Ty jsi se naučil dobře.

Tak proč se teď bojíte dělat to samé s Linuxem?

Na webu je spousta tutoriálů „Začínáme“ pro všechny druhy programovacích prostředí. Nyní říkáte GCC, takže budu předpokládat vývoj C++. Získejte Eclipse, nainstalujte CDT (c dev nástroje) na horní část platformy Eclipse (Eclipse je víceúčelové IDE, můžete jej použít pro C++ , PHP, Java, cokoli - ale musíte si nainstalovat nástroje pro svůj jazyk, protože byste to opravdu nechtěli předinstalovat jako VS a instalace trvá 3 dny :))

Na webu jsou snadno použitelné návody. IBM zde má jeden , což je docela komplexní.

Ladicí nástroje ... Eclipse má vestavěný ( výukový program ), ale můžete najít spoustu nástrojů, jako jsou ty, které jste zmínili, stačí hledat na webu a najdete spoustu možností. Chvíli vám bude trvat, než zjistíte, jak číst základní výpis (na rozdíl od uživatelského výpisu systému Windows), ale dostanete se tam.

Může být také užitečné zahájit blog se svými zkušenostmi, nejenže vám to umožní připomenout si, co jste udělali (např. Nastavit Eclipse, jak se vám líbí, zapomenete, kdy je třeba to udělat znovu v rok), ale pomůže ostatním ve vaší situaci.

1
gbjbaanb

Líbí se mi obě platformy a pro všechny rozdíly v uživatelském rozhraní a v ekosystému dev je považuji za více podobné než jiné pod krytím. Ve skutečnosti pro většinu konceptů systému Windows najdete ekvivalentní systémy Linux pouze hledáním na internetu.

Poté jsem důrazně doporučil naučit se dělat věci „unixovým způsobem“. Použijte příkazový řádek namísto chybných rozhraní GUI rozhraní (zde mluvím hlavně o gdb); nehledejte IDE a nenaučte se, jak místo toho používat sadu specializovaných nástrojů. Vyberte si dobrého editora (ukazující na vim) a naučte se ho dobře. Přečtěte si, jak make funguje, i když se nechcete stát odborníkem. Možná se vám dokonce líbí Linux. Hraní je zábavné a zábavné.

1

Nemyslím si, že musíte udělat Linux od nuly. Kdybych byl tebou, šel bych na Ubuntu. Je to pohodlnější a je založeno na debianu, existuje spousta technických materiálů.

Pokud chcete více doprovázet ponor do Linuxu, Gentoo je dobrá volba. Vyžaduje si, abyste si hodně přečetli o konfiguraci a jádrech, ale také vám poskytne docela funkční systém pro práci s af

0
anders.norgaard

První otázka, kterou bych chtěl položit, je, co chcete vyvinout? Pokud se jedná o aplikaci založenou na gui, může se to lišit od nutnosti psát něco jako rozšíření jádra.

V případě aplikace gui zjistím, že nejjednodušší metodou je použít Qt, který má své vlastní vývojové prostředí (Qt-Creator) a je multiplatformní, umožňuje naučit se pouze jedno API, které lze použít pro Windows/Linux/OSX a dokonce i mobilní vývoj. Stejně jako vizuální studio ve Windows, nebo XCode v OSX, můžete vytvářet a rozvržet okna a položky z grafického editoru a API je velmi snadné vyzvednout pomocí spousty ukázkových aplikací.

Pokud potřebujete získat více nízké úrovně, pak jakmile znáte cestu kolem linuxu na příkazovém řádku, víte, jak procházet adresáře, manipulovat se soubory, porozumět oprávnění atd., Pak začněte číst, jak kompilovat jednoduchý program s gcc, jak propojit soubory a spustit spustitelný soubor a pak jak ladit pomocí gdb.

Alternativně, pokud se vám to zdá trochu skličující, můžete si stáhnout Eclipse nebo jiné IDE, ale pravděpodobně se stanete mnohem pohodlnější s Linuxem v dlouhodobém horizontu, pokud nejprve vložíte čas a úsilí do příkazového řádku jako první.

0
TheDarkKnight

Google "Umění unixového programování" a přečtěte si jej. IMO, tvým hlavním problémem je odlišná filozofie, a ta kniha je k tomu vynikajícím čtením.

Také vás seznámí s některými neobvyklými, ale technicky velmi důležitými rozdíly mezi systémy * n * x a Windows - tyto jsou klíčem k pochopení toho, proč dělat věci jinak v Linuxu má smysl.

0
user59625