web-dev-qa-db-fra.com

Que faire avec le message "recompiler with -fPIC"

J'essaie de configurer le paquet source ffmpeg pour générer des fichiers .so plutôt que des fichiers .a.

J'exécute make après ./configure --enable-shared

Cela me donne le message suivant:

/usr/bin/ld: libavutil/display.o: relocation R_X86_64_PC32 against undefined symbol 'hypot@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC

Cependant, je ne sais pas où et comment ajouter l'indicateur -fPIC.

7
A1A2A3A4

Il existe une option ./configure qui pourrait être le moyen le plus simple de résoudre le problème:

andrew@ilium~/source/ffmpeg_build/ffmpeg/ffmpeg$ ./configure --help | grep -i pic
--enable-pic             build position-independent code
2
andrew.46

J'ai résolu la même erreur pour la compilation des sources FFMpeg 2.3.3 sous Ubuntu 14.04 LTS. J'ai réussi à compiler le code après avoir défini LD_LIBRARY_PATH à /usr/lib/x86_64-linux-gnu et ajouté -fPIC indicateur à --cc. Mes commandes de compilation de travail sont ici:

LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
./configure --prefix=.. --enable-shared --enable-gpl --enable-version3 --enable-runtime-cpudetect --disable-outdev=sdl --disable-opencl --enable-libmp3lame --enable-libx264 --cc="gcc -m64 -fPIC" --extra-cflags="-I../include" --extra-ldflags="-L../lib -ldl"
make -j4
1
Erol Ozcan

La relocalisation R_X86_64_PC32 par rapport au symbole non défini se produit généralement lorsque LDFLAGS est défini avec le renforcement et CFLAGS pas.
Peut-être juste une erreur de l'utilisateur:
Si vous utilisez -specs =/usr/lib/rpm/redhat/redhat-hardened-ld au moment du lien, vous devez également utiliser -specs =/usr/lib/rpm/redhat/redhat-hardened -cc1 au moment de la compilation, et pendant que vous compilez et liez en même temps, vous avez besoin des deux, ou supprimez -specs =/usr/lib/rpm/redhat/redhat-hardened-ld. Corrections communes:
https://bugzilla.redhat.com/show_bug.cgi?id=1304277#c
https://github.com/rpmfusion/lxdream/blob/master/lxdream-0.9.1-implicit.patch

0
Sérgio