Faites ce que le compilateur vous dit de faire, c'est-à-dire recompilez avec -fPIC
. Pour savoir ce que fait cet indicateur et pourquoi vous en avez besoin dans ce cas, consultez Options de génération de code du manuel de GCC.
En bref, le terme code indépendant de la position (PIC) fait référence au code machine généré qui est indépendant de l'adresse mémoire, c'est-à-dire qui ne fait aucune hypothèse sur l'endroit où il a été chargé dans la RAM. Seul le code indépendant de la position est censé être inclus dans les objets partagés (SO) car ils doivent avoir la capacité de changer dynamiquement leur emplacement dans la RAM.
Enfin, vous pouvez lire à ce sujet sur Wikipedia aussi.
Dans mon cas, cette erreur s'est produite car un make
la commande s'attendait à récupérer les bibliothèques partagées (*.so
files) depuis un répertoire distant indiqué par un LDFLAGS
variables d'environnement. Par erreur, seules les librairies statiques y étaient disponibles (*.la
ou *.a
des dossiers).
Par conséquent, mon problème ne résidait pas avec le programme que je compilais mais avec les bibliothèques distantes qu'il essayait de récupérer. Donc, je n'ai pas eu besoin d'ajouter d'indicateur (par exemple, -fPIC
) à la compilation interrompue par l'erreur de relocalisation. J'ai plutôt recompilé la bibliothèque distante pour que les objets partagés soient disponibles.
En gros, il s'agit d'une erreur de fichier introuvable déguisée.
Dans mon cas, j'ai dû supprimer un --disable-shared
égaré basculer dans le configure
invocation pour le programme requis, puisque les bibliothèques partagées et statiques ont toutes deux été construites par défaut.
J'ai remarqué que la plupart des programmes construisent les deux types de bibliothèques en même temps, donc la mienne est probablement un cas d'urgence. En général, il se peut que vous deviez plutôt activer les bibliothèques partagées, en fonction des valeurs par défaut.
Pour inspecter votre situation particulière avec les commutateurs de compilation et les valeurs par défaut, je voudrais lire le résumé qui apparaît avec ./configure --help | less
, généralement dans la section Fonctionnalités facultatives. J'ai souvent trouvé que cette lecture est plus fiable que les guides d'installation qui ne sont pas mis à jour au fur et à mesure que les programmes de dépendance évoluent.
Corrigé avec -no-pie
option à l'étape de l'éditeur de liens :
g++-8 -L"/home/pedro/workspace/project/lib" -no-pie ...