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.

44
demandé sur jww 2012-12-11 05:23:15

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!

55
répondu zaufi 2013-08-06 13:25:46

Jetez un oeil à cette page.

Vous pouvez essayer d'ajouter globalement le drapeau en utilisant: export CXXFLAGS="$CXXFLAGS -fPIC"

13
répondu Kraiden 2018-04-27 07:57:01

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.

5
répondu dmaij 2012-12-11 01:36:31

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"

-1
répondu Dark Coder 2015-11-26 05:13:55