web-dev-qa-db-ja.com

「-fPICで再コンパイル」メッセージの処理

.aファイルではなく.soファイルをビルドするようにffmpegソースパッケージを構成しようとしています。

./configure --enable-sharedを実行した後、makeを実行します

これにより、次のメッセージが表示されます。

/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

ただし、-fPICフラグを追加する場所と方法はわかりません。

7
A1A2A3A4

問題を解決する最も簡単な方法である可能性のある./configureオプションがあります。

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

Ubuntu 14.04 LTSでFFMpeg 2.3.3ソースをコンパイルする際の同じエラーを解決しました。 LD_LIBRARY_PATH/usr/lib/x86_64-linux-gnuに設定し、-fPICフラグを--ccに追加した後、コードを正常にコンパイルしました。私の作業コンパイルコマンドはここにあります:

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

未定義のシンボルに対するR_X86_64_PC32の再配置は、通常、LDFLAGSがハードニングで設定され、CFLAGSが設定されていない場合に発生します。
たぶんユーザーエラー:
リンク時に-specs =/usr/lib/rpm/redhat/redhat-hardened-ldを使用している場合は、-specs =/usr/lib/rpm/redhat/redhat-hardenedも使用する必要があります。 -cc1をコンパイル時に使用し、同時にコンパイルとリンクを行う場合は、両方が必要か、または-specs =/usr/lib/rpm/redhat/redhat-hardened-ldをドロップします。一般的な修正:
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