Passer un drapeau gcc à travers makefile
Je suis en train de construire une passe à l'aide de llvm et j'ai terminé la construction de llvm et ses composants associés. Cependant, quand je lance le faire après avoir suivi toutes les étapes pour construire un laissez-passer dont la makefilej'ai le
réinstallation R_X86_64_32 contre "un symbole local" ne peut pas être utilisée lors de la prise d'un objet partagé; recompiler avec -fPIC
Après tyring de trouver une solution par googler le message d'erreur, je suis venu pour savoir que ce n'est pas spécifique à llvm. Quelques solutions ont suggéré que je devrais utiliser "--enable-shared" lors de l'exécution de configurer, mais qui n'aide pas mon cas. Maintenant, je veux re-construire llvm à l'aide de fPIC
comme le message d'erreur dit. Mais comment puis-je faire cela en utilisant le makefile?
source d'informationauteur Arjun Singri
Vous devez vous connecter pour publier un commentaire.
Regarde comme on pourrait ajouter l'option-fPIC (indépendant de la position de code, quelque chose que vous voulez pour une bibliothèque partagée qui pourrait être chargé à toute autre adresse) en définissant des variables shell:
Regardant Makefile.les règleselles seront récupérées et utilisées. Semble étrange qu'il n'était pas là pour commencer.
EDIT:
En fait, la lecture de plus dans le makefile, j'ai trouvé ce lien pour le LLVM Makefile Guide. De Makefile.les règles, soit SHARED_LIBRARY=1 ou LOADABLE_MODULE=1 (ce qui implique SHARED_LIBRARY) dans le Makefile mettra -fPIC dans les options du compilateur.
Si vous êtes modérément convaincu que vous devez utiliser '
-fPIC
"partout (ou"-m32
"ou"-m64
', j'ai besoin de plus souvent), vous pouvez utiliser le "truc":Cela suppose un Bourne/Korn/POSIX/shell Bash et définit la variable d'environnement CC '
gcc -fPIC
' avant de lancer le script de configuration. Ce (généralement) s'assure que toutes les compilations sont fait avec les indicateurs spécifiés. Pour le réglage de l' 'bittiness" de la compilation, cela fonctionne parfois mieux que les divers autres mécanismes de vous trouver - il est difficile pour une compilation à agiter autour de lui, sauf en ignorant complètement le fait que vous avez spécifié le compilateur C pour utiliser.Une autre option est de passer -fPIC directement à faire de la manière suivante: