Comment recompiler avec-fPIC
J'essayais de réinstaller mon ffmpeg, en suivant ce guide , sur ma machine Ubuntu ARM. Malheureusement, lorsque je compile un programme qui utilise cette lib, j'obtiens l'échec suivant:
/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
Maintenant, je tiens à le recompiler avec -fPIC
comme le compilateur suggère, mais je n'ai aucune idée de comment. Toute aide est appréciée.
4 réponses
En bref, l'erreur signifie que vous ne pouvez pas utiliser une bibliothèque statique à être lié w/ dynamique. La bonne façon est d'avoir un libavcodec compilé dans. so au lieu de .a, donc l'autre bibliothèque .so que vous essayez de construire reliera bien.
Le chemin Le plus court à faire est d'ajouter --enable-shared
à ./configure
options.
ou même vous pouvez essayer de désactiver les bibliothèques partagées (ou statiques) du tout... vous choisissez ce qui vous convient!
Jetez un oeil à cette page.
Vous pouvez essayer d'ajouter globalement le drapeau en utilisant: export CXXFLAGS="$CXXFLAGS -fPIC"
Après l'étape de configuration, vous avez probablement un makefile. A l'intérieur de ce makefile chercher CFLAGS (ou similaire). puf-fPIC à la fin et exécuter faire à nouveau. En d'autres termes-fPIC est une option de compilateur qui doit être passée au compilateur quelque part.
Avant de compiler, assurez-vous que "rules.mk" le fichier est inclus correctement dans Makefile ou l'inclut explicitement par:
"source de règles.mk"