Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens l'erreur « la relocalisation R_ARM_MOVW_ABS_NC par rapport à « un symbole local » ne peut pas être utilisée lors de la création d'un objet partagé » ?

Pourquoi est-ce que j'obtiens l'erreur « la relocalisation R_ARM_MOVW_ABS_NC par rapport à « un symbole local » ne peut pas être utilisée lors de la création d'un objet partagé » ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 07:00:02795parcourir

Why do I get the error

Recompilation avec l'indicateur -fPIC pour la machine ARM Ubuntu

Lors de la reconstruction de FFmpeg sur une machine ARM Ubuntu, on peut rencontrer l'erreur :

relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

Cette erreur indique que le système tente de lier une bibliothèque statique à une bibliothèque dynamique, ce qui est incompatible. Pour résoudre ce problème, il est nécessaire de recompiler la bibliothèque problématique, telle que FFmpeg, avec l'indicateur -fPIC.

Processus de recompilation

Les étapes suivantes peuvent être suivies pour recompiler une bibliothèque avec l'option -fPIC :

  1. Modifier la source de la bibliothèque Code : Localisez et ouvrez les fichiers de code source de la bibliothèque à l'origine de l'erreur de relocalisation.
  2. Ajoutez l'indicateur -fPIC : Ajoutez l'indicateur -fPIC aux options du compilateur spécifiées dans le code source. Cet indicateur demande au compilateur de générer du code indépendant de la position (PIC), adapté à la liaison dynamique.
  3. Recompilez la bibliothèque : Reconstruisez la bibliothèque à l'aide des options du compilateur mises à jour. Cela peut généralement être fait à l'aide de la commande make.
  4. Installer la bibliothèque recompilée : Une fois la bibliothèque recompilée avec PIC, elle doit être installée dans le répertoire de bibliothèque du système. Cela le rendra disponible pour la liaison avec d'autres programmes.

Exemple spécifique pour FFmpeg

Pour FFmpeg, la commande suivante peut être utilisée pour le recompiler avec le -Drapeau fPIC :

./configure --enable-shared --disable-static
make

En ajoutant l'indicateur --enable-shared, les bibliothèques partagées seront générées à la place des statiques. L'indicateur --disable-static garantit qu'aucune bibliothèque statique n'est créée.

Après avoir reconstruit FFmpeg avec ces options, les bibliothèques recompilées peuvent être installées dans les répertoires système appropriés à l'aide de make install. Cela rendra les bibliothèques FFmpeg compatibles PIC disponibles pour liaison et utilisation par d'autres programmes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn