Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens une erreur de relocalisation lors de la compilation avec ffmpeg et comment puis-je la corriger ?

Pourquoi est-ce que j'obtiens une erreur de relocalisation lors de la compilation avec ffmpeg et comment puis-je la corriger ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 04:21:01508parcourir

Why do I get a relocation error when compiling with ffmpeg and how can I fix it?

Recompilation avec -fPIC pour la compatibilité des bibliothèques partagées

Lors de la compilation de programmes utilisant des bibliothèques, il est essentiel d'assurer la compatibilité entre le type de bibliothèque et la compilation drapeaux. Un de ces scénarios se produit lors de l'utilisation de la machine ARM Ubuntu pour réinstaller ffmpeg. La compilation d'un programme qui utilise la bibliothèque ffmpeg peut entraîner l'erreur suivante :

/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

Cette erreur indique une incompatibilité entre le type de bibliothèque et les indicateurs de compilation. L'indicateur -fPIC est généralement utilisé lors de la compilation de code qui sera inclus dans une bibliothèque partagée (.so). Par défaut, cependant, ffmpeg est souvent compilé dans une bibliothèque statique (.a).

Pour résoudre ce problème, vous devez recompiler ffmpeg avec l'indicateur -fPIC. Cela peut être accompli en modifiant les options de compilation lors de la configuration de ffmpeg. Pour ce faire, ajoutez "--enable-shared" aux options ./configure. Alternativement, vous pouvez désactiver complètement les bibliothèques partagées en ajoutant "--disable-shared" à la place.

Une fois cette modification effectuée, la recompilation de ffmpeg produira une bibliothèque partagée (.so) au lieu d'une bibliothèque statique (.a ). Lorsque vous compilerez votre programme qui utilise la bibliothèque ffmpeg, il pourra se connecter avec succès à la bibliothèque partagée, résolvant ainsi l'erreur de relocalisation.

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