passando da Windows a Linux [chiuso]

57

Ho bisogno di riconciliare questi 2 fatti:

  1. Non mi sento a mio agio a lavorare su Linux;
  2. Ho bisogno di sviluppare software per Linux.

Alcuni background: ho un'esperienza di programmazione di oltre 10 anni su Windows (quasi esclusivamente C / C ++, ma anche alcuni .NET), ero a New York da circa 3 anni come utente di FreeBSD (quindi dovevo tornare a Windows), e non ho mai avuto molta fortuna con Linux. E ora devo sviluppare software per Linux. Ho bisogno di un piano.

Su Windows, puoi farti a meno di conoscere un linguaggio di programmazione, un'API che stai codificando, l'IDE (VisualStudio) e alcuni strumenti di base per la risoluzione dei problemi (Depends, ProcessExplorer, DebugView, WinDbg). Tutto il resto viene naturale.

Su Linux, è una storia molto diversa. Come diavolo saprei cosa potrebbe caricare la DLL (mi dispiace, oggetto condiviso) se collego ad esso dal plugin di Firefox? Qual è l'equivalente Linux dell'inserimento di __asm int 3 / DebugBreak () nell'origine e nell'esecuzione del programma, e quindi che il sistema operativo chiama un debugger? Perché diavolo le build di rilascio usano qualcosa, chiamato appLoader, mentre le build di debug funzionano in qualche modo in modo diverso? Il peggiore di tutti: come fornire un ambiente di sviluppo Linux?

Quindi, tenendo conto che l'odio è solitamente associato a non sapere abbastanza, cosa consiglieresti? Sto bene con Emacs e GCC. Ho bisogno di istruirmi come amministratore / utente di Linux e ho bisogno di apprendere strumenti adeguati per la risoluzione dei problemi (strace è cool, btw), equivalenti a quelli che ho citato sopra.

Devo fare Linux da Scratch? O devo solo leggere alcuni libri (ho letto "UNIX programming environment" di Kernighan e "Advanced Programming ..." di Stevens, ma ho bisogno di imparare qualcosa di più pratico)? O devo avere qualche distro Linux sul mio computer di casa?

    
posta rincewind 19.07.2012 - 11:10
fonte

16 risposte

61

Potresti trovare l'articolo Collegamento dinamico in Linux e Windows interessante che spiega come ciascun sistema operativo esegue il collegamento dinamico. L'articolo Percorsi di ricerca di librerie condivise spiega come vengono trovate le librerie. Anche Librerie Linux statiche, dinamiche condivise e caricabili è molto buona. Una cosa carina delle librerie Linux è che hanno un supporto migliore per il controllo delle versioni e diverse versioni di una libreria rispetto a Windows (AFAIK, non Windows). Vedi Interfaccia della libreria Versioning in Solaris e Linux per questo. Questi articoli dovrebbero davvero aiutarti a comprendere le librerie.

Il GDB è molto potente, una buona introduzione è probabilmente Tutorial gdb di RMS . Potresti voler leggere i punti di interruzione condizionali. Per gli equivalenti a __asm(int 3) vedi la domanda Imposta il punto di interruzione in codice C o C ++ a livello di codice per gdb su Linux .

Il libro Advanced Unix Programming di Marc Rochkind è un IMHO assolutamente da leggere. Ha molti esempi e copre tutti gli argomenti POSIX / SUS in un modo molto ben spiegato. È il miglior libro su questo argomento che ho letto finora.

Ma per semplificarti la vita, in realtà raccomando di usare un'API di alto livello che elabori le cose per te, come Qt. Rende anche la scrittura multipiattaforma molto più semplice.

Doing Linux From Scratch ti aiuta a capire come è composto un sistema Linux, ma penso che non migliori molto la tua conoscenza al riguardo dal punto di vista degli sviluppatori. Tuttavia, ti rende più comodo con Linux, quando impari quali parti ci sono in un ambiente Linux (e in parte anche perché ). Un Linux non sarà una grande scatola nera per te dopo aver lavorato con Linux From Scratch.

    
risposta data 23.05.2017 - 14:40
fonte
16

Se ti piace strace , non dimenticare ltrace : l'equivalente per le chiamate in biblioteca.
Inoltre, si, consiglio Linux From Scratch . È un buon esercizio per elaborare gli elementi principali del sistema operativo e il modo in cui si integrano.
Per un trattamento di riferimento della programmazione di sistema moderno e completo, ti consigliamo di consultare Interfaccia di programmazione Linux .

    
risposta data 07.04.2011 - 11:02
fonte
11

Il Mac OS X è come una Mercedes; è il più bello e pulito ma costa molto. Windows è come una Toyota; ti farà andare avanti e indietro.

Linux è come una hot rod; È per le persone a scavare e smontare e rimettere insieme. Linux non è per qualcuno che vuole solo usare il computer; è per le persone che amano i computer. Le persone che non amano i computer dovrebbero starne alla larga.

Le cose che hai imparato in Windows non si tradurranno molto bene, no. Ma puoi vedere gli interni e guardare il motore girare.

Prova a prendere Linux come un nuovo giocattolo, con cui puoi giocare, gattonare e vedere cosa sta succedendo. Le cose che sono facili in Windows sono più difficili in Linux; le cose che sono impossibili in Windows sono possibili in Linux.

Se ami i computer, puoi amare Linux; se non ami i computer, perché stai programmando?

    
risposta data 07.04.2011 - 09:44
fonte
9

Che ne pensi di sviluppare su Mono con Monodevelop? Questo ti farebbe iniziare abbastanza facilmente riutilizzando la tua esperienza in .NET.

    
risposta data 07.04.2011 - 08:23
fonte
8

È scoraggiante quando lo si guarda fin dall'inizio (proprio come se si trattasse di uno sviluppatore Linux con l'incarico di eseguire alcuni sviluppi di Windows). Vorrei affrontare questo problema alla volta.

  • Prima di tutto configura il tuo ambiente (compilatore, IDE - sì, esistono, Netbeans / Eclipse, ecc.)
  • Avanti, apri l'apis di livello superiore installato (boost / Qt ecc.)
  • Inizia lentamente, se c'è un problema immediato da risolvere, ottieni la compilazione del codice (o inizia a scrivere da zero, ecc.) Come faresti per qualsiasi progetto di sviluppo, prendi le cose che sai prima di lavorare (cioè cose che non bisogno di interazione specifica del sistema operativo), e poi quando si colpisce una ricerca di intoppo, sono sicuro che qualcuno là fuori ha incontrato lo stesso problema prima e lo ha risolto ..

Soprattutto, lascia tutte le tue opinioni soggettive sulla porta. E no, non è necessario essere un guru per sviluppare in Linux, ne so abbastanza per andare in giro, e non tutto - ma mi sento a mio agio con questo ...

    
risposta data 07.04.2011 - 12:02
fonte
6

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.

Quanto tempo ci è voluto per diventare abile nel lavorare in un ambiente Windows. Potresti dire che è stato facile iniziare. Ma hai avuto qualche anno di lavoro con Windows prima. Da quanto tempo hai usato Windows prima di scrivere il tuo primo programma. Erano 8 anni per me, anche se ora uso Linux quasi esclusivamente da 5 anni. Ora sono più esperto in Linux e in Windows. Dovresti darti almeno un po 'di tempo per familiarizzare con un nuovo sistema.

Inizia con l'elenco delle applicazioni che non puoi vivere senza Windows e cerca alternative nel mondo * nix. link e le sezioni di ulteriore lettura di Wikipedia possono essere utili qui.

Ecco un elenco di software alternativo che potrebbe rivelarsi molto utile. Ecco alcune alternative alle cose che hai citato.

Altre risorse utili per passare da un sistema all'altro

Informazioni su come diventare un utente migliore o un utente amministratore dare un'occhiata a queste risorse

Sembra anche che sia passato un po 'di tempo da quando hai guardato il mondo * nix. Consiglierei alcune delle nuove versioni di distro da fedora , suse , debian , o la mia postazione di lavoro preferita Ubuntu .

Probabilmente ora puoi cavartela senza conoscere le parti interne del sistema e solo le basi come in Windows. Non proverei solo a farla franca con il minimo. Se vedi Linux come uno strumento che ti assiste nel tuo sviluppo e non meramente un sistema operativo in cui lo sviluppi, sarebbe utile.

Linux From Scratch sarà molto più importante se si sta specificamente sviluppando per Linux è un senso molto specifico e tecnico. OSSIA vuoi sviluppare per il kernel, o portarti su un super computer con Linux. Sarebbe molto utile mai meno. Penso che probabilmente potresti lasciarlo per qualche mese mentre cerchi di andare in Ubuntu. Ubuntu sarà il più vicino al mondo delle cose che funzionano di mac e windows.

    
risposta data 13.04.2017 - 14:22
fonte
6

Penso che tu abbia risposto alla tua domanda nella domanda:

"Su Windows, puoi cavartela conoscendo solo un linguaggio di programmazione, un'API che stai codificando, il tuo IDE (VisualStudio) e alcuni strumenti di base per la risoluzione dei problemi (Depends, ProcessExplorer, DebugView, WinDbg). viene naturale. "

Indovina cosa, su Linux puoi cavartela solo conoscendo un linguaggio di programmazione, un'API (o una coppia), il tuo IDE (Eclipse o NetBeans, persino Geany, Emacs o vim, se preferisci) e alcuni strumenti di base per la risoluzione dei problemi (gdb, strumenti di tracciamento, lint, htop, ps).

Hai un sacco di conoscenze investite nell'ecosistema di programmazione di Windows. Gran parte di ciò è (si spera) una conoscenza astratta (che cosa è un compilatore, un debugger, una libreria condivisa, un processo, un thread? Cosa fanno?) Che si romperà facilmente, una volta che sarai al corrente dei diversi strumenti. Alcuni sono specifici del dominio (Quale DLL è collegata quando aggiungo X a un progetto?), Ma anche il passaggio da una classe di lingua a un'altra in Windows richiederebbe un nuovo apprendimento.

Installa Ubuntu o Fedora in una VM, leggi alcuni c ++ Hello World in Eclipse o esercitazioni su NetBeans, e qualche debugging nei tutorial di Eclipse / NetBeans, e lascia che la naturale capacità di adattamento del tuo cervello prenda il sopravvento. Tradurrà le idee per te se ti rilassi e lo metti semplicemente al lavoro.

    
risposta data 07.07.2012 - 23:59
fonte
3

Ho imparato Unix in generale leggendo le pagine man. Dovresti almeno scremarli. Sì, intendo tutti loro. Il metodo lo uso per effettuare il cd nelle directory della pagina man e attaccare una sezione alla volta.

Io uso questo:

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

... sostituendo .1 con il numero della sezione che stai leggendo, .2, .3, ecc. Premi ctrl-Z ctrl-C per uscire dal ciclo. Il tuo chilometraggio potrebbe variare se la tua distribuzione Linux memorizza le cose in modo diverso, cioè non come cmdname.1.gz.

Basta leggere le descrizioni e altro se è qualcosa di interessante. Le sezioni 1, 2 e 3 sono le più importanti per un programmatore. 1 riguarda i comandi utente generali, che includono gli strumenti di compilazione e varie utilità di analisi forense. 2 sono chiamate di sistema e 3 chiamate di libreria.

    
risposta data 07.04.2011 - 09:52
fonte
3

Non forzarti a fare qualcosa che non ti piace. Usa Windows come ambiente di sviluppo, scrivi un codice portatile, esegui una cross-compilazione per Linux e provalo solo occasionalmente in una VM.

    
risposta data 07.04.2011 - 11:42
fonte
2

Non sono sicuro che funzioni per le piattaforme ma per i linguaggi di programmazione, ho trovato utile pensare a come mi sono familiarizzato e agio con quelle in cui sono bravo e provare a riprodurre quelle esperienze e attività per quello che sto cercando di imparare.

Forse qualcosa su quelle righe?

In generale, però, il mio interesse e la mia fiducia con GNU / Linux sono diventati molto più insidiosi (e richiedono un po 'di complicazioni nei primi tempi) rispetto a Windows. Avevo bisogno di pasticciare un sacco di cose per far funzionare le cose e questo mi ha aiutato a imparare un sacco di cose. Le cose vanno molto meglio ora ma tutte quelle ore hanno aiutato.

    
risposta data 07.04.2011 - 13:07
fonte
2

Ero uno dei due incaricato di qualcosa di simile, ma diverso. Lavoro in un distretto scolastico K-12 e il sistema aziendale (risorse umane, finanziari, ecc.) Sta migrando da un db HP3000 / TurboImage a una piattaforma SQL / MS SQL. Sono a mio agio con il lato MS SQL. Ma non il lato Linux. Noi due siamo dalla parte dell'amministratore, non dalla parte della programmazione. La programmazione viene eseguita all'esterno - app aziendale di terze parti per le organizzazioni K-12.

Durante i fine settimana ho preso una lezione di Intro per Linux (Redhat) di 5 weekend - è stata eseguita principalmente in modalità riga di comando - e per me è valso la pena di iniziare rapidamente nel modo di fare Linux di Linux. Ovviamente YMMV a seconda della classe / dell'insegnante.

Hai menzionato "Peggiore di tutto: come fornire un ambiente di sviluppo Linux?"? Dato che hai già familiarità con Windows, ti consiglio vivamente di procurarti una copia di vmWare Workstation. Con ciò è possibile mantenere Windows come workstation e installare Linux come sistemi guest: eliminare, risciacquare e ripetere secondo necessità. Quando si ottiene una buona configurazione, credo che si possa eseguire un'istantanea, ma non posso dire con certezza quali versioni siano in grado di eseguire l'istantanea. E se vai nel percorso di vmWare Workstation per abilitare più configurazioni di sviluppo, fai un salto di memoria, sicuramente.

Inoltre non mi dispiace raccomandare l'uso di CentOS come sistema operativo Linux per gli ospiti. Da quello che ho capito, è come RedHat senza i costi di branding e / o vendite e / o supporto. Non ho familiarità con le altre versioni di Linux, quindi non posso dare input su quelle.

Greg

    
risposta data 20.07.2011 - 11:27
fonte
1

Mi piacciono entrambe le piattaforme e per tutte le differenze nell'interfaccia utente e nell'ecosistema di sviluppo, le trovo più simili delle diverse sotto copertura. In effetti, per la maggior parte dei concetti di Windows è possibile trovare quelli equivalenti di Linux semplicemente cercando su Internet.

Detto ciò, suggerisco caldamente di imparare come fare le cose in "modo Unix". Usa la linea di comando piuttosto che i front-end con interfaccia grafica sfuggente (sto parlando principalmente di gdb qui); non cercare un IDE e impara come usare invece una serie di strumenti specializzati. Scegli un buon editor (puntando a vim) e imparalo bene. Leggi come make funziona anche se non hai intenzione di diventare un esperto. Forse ti piacerà anche Linux. È facile da usare e divertente da giocare.

    
risposta data 07.04.2011 - 15:13
fonte
1

Considera questo: una volta non sapevi nulla di Windows, ma l'hai imparato e col tempo è diventato comodo con esso.

Poi MS ha cambiato qualsiasi sistema di programmazione con cui ti trovavi a suo agio in .NET e non sapevi più nulla di DLL, COM e quant'altro, dovevi imparare cose come assembly, GAC, domini delle app. Hai imparato quelli ok.

Allora perché ora sei preoccupato di fare lo stesso con Linux?

Ci sono un sacco di esercitazioni sul Web per iniziare tutti i tipi di ambienti di programmazione. Ora dici GCC, quindi assumerò lo sviluppo del C ++. Procurati Eclipse, installa il CDT (strumenti c dev) sulla parte superiore della tua piattaforma Eclipse (Eclipse è un IDE multiuso, puoi usarlo per C ++, PHP, Java, qualsiasi cosa - ma devi installare gli strumenti per la tua lingua in quanto non vorrai che fosse tutto preinstallato come VS e impiegare 3 giorni per l'installazione :))

Ci sono tutorial facili da usare in tutto il web. IBM ne ha uno che è abbastanza completo.

Strumenti di debug ... eclipse lo ha incorporato ( tutorial ), ma puoi trovare molti strumenti come quelli che hai menzionato, basta cercare sul Web e troverai molte opzioni. Ci vorrà un po 'di tempo per capire come leggere un core dump (al contrario di un windows userdump per esempio) ma ci arriverete.

Potrebbe anche valere la pena iniziare un blog con le tue esperienze, non solo ti permetterà di ricordare a te stesso ciò che hai fatto (es. impostando eclissi come ti piace, ti dimenticherai quando devi farlo di nuovo tra un anno) ma aiuterà gli altri nella tua situazione.

    
risposta data 08.07.2012 - 18:12
fonte
0

Non penso che tu debba fare Linux da zero. Se fossi in te, andrei su Ubuntu. È più comodo e, sulla base di debian, c'è un sacco di materiale tecnico disponibile.

Se vuoi fare un salto in prima persona in Linux, Gentoo è una buona opzione. Ti richiede di leggere parecchio sulla configurazione e sui kernel, ma ti dà anche un sistema abbastanza funzionale per lavorare in af

    
risposta data 07.07.2012 - 22:43
fonte
0

Google "L'arte della programmazione Unix" e leggerlo. IMO, la tua principale difficoltà è la diversa filosofia, e quel libro è una lettura eccellente per questo.

Ti introduce anche a differenze non ovvie ma tecnicamente molto importanti tra i sistemi * n * x e Windows - queste sono le chiavi per capire perché fare le cose in un altro modo ha senso su Linux.

    
risposta data 19.07.2012 - 06:05
fonte
0

La prima domanda che vorrei è: che cosa vuoi sviluppare? Se si tratta di un'applicazione basata su interfaccia grafica, allora può essere diverso dal dover scrivere qualcosa come un'estensione del kernel.

Nel caso di un'app gui, trovo che il metodo più semplice sia usare Qt, che ha il proprio ambiente di sviluppo (Qt-Creator) ed essere multipiattaforma, ti permette di imparare solo una API che può essere usata per Windows / Linux / OSX e persino lo sviluppo mobile. Come Visual Studio in Windows, o XCode in OSX, puoi creare e impaginare finestre e oggetti da un editor grafico e l'API è molto facile da raccogliere con un sacco di applicazioni di esempio.

Se hai bisogno di ottenere più basso livello, una volta che sai come orientarti su Linux sulla riga di comando, sappi come attraversare le directory, manipolare i file, capire le autorizzazioni ecc., quindi iniziare a leggere come compilare un programma semplice con gcc, come collegare i file ed eseguire l'eseguibile e poi come eseguire il debug con gdb.

In alternativa, se ciò sembra un po 'scoraggiante, è possibile scaricare Eclipse o un altro IDE, ma probabilmente a lungo andare diventerà molto più comodo con Linux, se prima impieghi tempo e impegno nella riga di comando.

    
risposta data 26.04.2013 - 12:35
fonte

Leggi altre domande sui tag