.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フラグを追加する場所と方法はわかりません。
問題を解決する最も簡単な方法である可能性のある./configureオプションがあります。
andrew@ilium~/source/ffmpeg_build/ffmpeg/ffmpeg$ ./configure --help | grep -i pic
--enable-pic build position-independent code
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
未定義のシンボルに対する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