Je dois réconcilier ces 2 faits:
- Je ne me sens pas à l'aise pour travailler sur Linux;
- J'ai besoin de développer un logiciel pour Linux.
Quelques antécédents: J’ai plus de 10 ans d’expérience en programmation sous Windows (presque exclusivement en C / C ++, mais aussi en .NET), j’utilisais FreeBSD depuis environ 3 ans à la maison (il fallait ensuite revenir à la version précédente). Windows), et je n’ai jamais eu beaucoup de chance avec Linux. Et maintenant, je dois développer un logiciel pour Linux. J'ai besoin d'un plan.
Sous Windows, vous pouvez vous contenter de connaître un langage de programmation, une API avec laquelle vous codez, votre IDE (VisualStudio) et des outils de base pour le dépannage (Depends, ProcessExplorer, DebugView, WinDbg). Tout le reste vient naturellement.
Sur Linux, c'est une histoire très différente. Comment diable pourrais-je savoir quelle DLL (désolé, Shared Object) se chargerait si je la reliais à partir du plugin Firefox? Quel est l'équivalent Linux d'insérer __asm int 3 / DebugBreak () dans le source et d'exécuter le programme, puis de laisser le système d'exploitation appeler un débogueur? Pourquoi les builds de version infernale utilisent-ils quelque chose, appelé appLoader, alors que les builds de débogage fonctionnent d'une manière ou d'une autre? Le pire de tout: comment provisionner l'environnement de développement Linux?
Donc, compte tenu du fait que la haine est généralement associée à un manque de connaissances, que recommanderiez-vous? Je suis d'accord avec Emacs et GCC. Je dois me former en tant qu'administrateur / utilisateur de Linux et apprendre les outils de dépannage appropriés (strace is cool, d'ailleurs), équivalents à ceux que j'ai mentionnés ci-dessus.
Dois-je faire Linux à partir de zéro? Ou dois-je simplement lire quelques livres (j'ai lu "Environnement de programmation UNIX" de Kernighan et "Programmation avancée ..." de Stevens, mais j'ai besoin d'apprendre quelque chose de plus pratique)? Ou ai-je besoin d'une distribution Linux sur mon ordinateur personnel?
man
est votre ami. Je voudrais man nm
et man ld
comme point de départ.