Preciso conciliar esses 2 fatos:
- Não me sinto confortável trabalhando no Linux;
- Eu preciso desenvolver software para Linux.
Alguns antecedentes: Tenho mais de 10 anos de experiência em programação no Windows (quase exclusivamente C / C ++, mas também alguns .NET), eu era usuário do FreeBSD em casa por cerca de 3 anos (mais ou menos). Windows) e nunca tive muita sorte com o Linux. E agora eu tenho que desenvolver software para Linux. Eu preciso de um plano.
No Windows, você pode se familiarizar apenas com o conhecimento de uma linguagem de programação, uma API contra a qual está codificando, seu IDE (VisualStudio) e algumas ferramentas básicas para solução de problemas (Depends, ProcessExplorer, DebugView, WinDbg). Tudo o resto vem naturalmente.
No Linux, é uma história muito diferente. Como diabos eu saberia qual DLL (desculpe, Objeto Compartilhado) carregaria, se eu vincular a ela a partir do plugin Firefox? Qual é o equivalente do Linux à inserção de __asm int 3 / DebugBreak () na fonte e na execução do programa, e depois deixar o SO chamar um depurador? Por que as versões infernais usam algo chamado appLoader, enquanto as versões depuração funcionam de alguma forma diferente? O pior de tudo: como provisionar o ambiente de desenvolvimento Linux?
Então, considerando que o ódio geralmente está associado a não saber o suficiente, o que você recomendaria? Eu estou bem com Emacs e GCC. Preciso me educar como administrador / usuário do Linux e preciso aprender as ferramentas adequadas para solução de problemas (strace is cool, btw), equivalentes às mencionadas acima.
Preciso fazer o Linux a partir do zero? Ou preciso apenas ler alguns livros (li o "ambiente de programação UNIX" de Kernighan e "Advanced Programming ..." de Stevens, mas preciso aprender algo mais prático)? Ou preciso ter alguma distribuição Linux no meu computador doméstico?
man
é seu amigo. Eu faria man nm
e man ld
como ponto de partida.