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 ?
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!