J'essaie de compiler un exécutable (fichier ELF) qui n'utilise pas de chargeur dynamique. J'ai construit un compilateur croisé qui compile les mips de Linux pour les utiliser sur un simulateur que j'ai fait. J'ai affirmé le drapeau -static-libgcc lors de la compilation de mon fichier hello.cpp (programme hello world). Apparemment, cela ne suffit pas. Parce qu'il y a encore un segment dans mon exécutable qui contient le nom/chemin du chargeur dynamique. Quels drapeaux dois-je utiliser pour générer un exécutable qui contient TOUT ce qui doit être exécuté? Dois-je reconstruire mon compilateur croisé?
Essayez d'utiliser le -static
drapeau?
-static -static-libgcc -static-libstdc++
Utilisez ces trois indicateurs pour établir un lien avec les versions statiques de toutes les dépendances (en supposant gcc). Notez que dans certaines situations, vous n'avez pas nécessairement besoin des trois drapeaux, mais ils ne "blessent" pas non plus. Par conséquent, allumez les trois.
Assurez-vous qu'il n'y a vraiment pas de lien dynamique
ldd yourexecutable
devrait retourner "pas un exécutable dynamique" ou quelque chose d'équivalent.
Assurez-vous qu'il ne reste aucun symbole non résolu
nm yourexecutable | grep " U "
La liste doit être vide ou ne doit contenir que quelques symboles spéciaux de l'espace noyau comme
U __tls_get_addr
Enfin, vérifiez si vous pouvez réellement exécuter votre exécutable