Devo conciliare questi 2 fatti:
- Non mi sento a mio agio a lavorare su Linux;
- Ho bisogno di sviluppare software per Linux.
Un po 'di esperienza: ho più di 10 anni di esperienza di programmazione su Windows (quasi esclusivamente C / C ++, ma anche .NET), sono stato un utente di FreeBSD a casa per circa 3 anni circa (poi ho dovuto 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 semplicemente conoscere un linguaggio di programmazione, un'API su cui stai codificando, il tuo 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 potrei sapere quale DLL (mi dispiace, oggetto condiviso) caricare se collego ad esso dal plugin di Firefox? Qual è l'equivalente di Linux inserendo __asm int 3 / DebugBreak () nel sorgente ed eseguendo il programma, e quindi lasciando che il sistema operativo chiami un debugger? Perché le build di versioni infernali usano qualcosa, chiamato appLoader, mentre le build di debug funzionano in qualche modo diverse? Peggio ancora: come effettuare il provisioning dell'ambiente di sviluppo Linux?
Quindi, tenendo conto del fatto che l'odio è solitamente associato al non sapere abbastanza, cosa consiglieresti? Sto bene con Emacs e GCC. Ho bisogno di educare me stesso come amministratore / utente Linux e ho bisogno di imparare strumenti di risoluzione dei problemi adeguati (strace is cool, btw), equivalenti a quelli che ho menzionato sopra.
Devo fare Linux da Scratch? Oppure devo solo leggere alcuni libri (ho letto "Ambiente di programmazione UNIX" di Kernighan e "Programmazione avanzata ..." di Stevens, ma devo imparare qualcosa di più pratico)? O devo avere una distro Linux sul mio computer di casa?
man
è tuo amico. Vorrei man nm
e man ld
come punto di partenza.