質問: pieなしでffmpegとlibaomをコンパイルするにはどうすればよいですか ubuntu18.04のgccコンパイラとg ++コンパイラがデフォルトで次のオプションを有効にしているため、ソースからffmpegとlibaomをコンパイルしようとしています:--enable-default-pie$ gcc -v using built-in specs. collect_gcc=gcc collect_lto_wrapper=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper offload_target_names=nvptx-none offload_target_default=1 target: x86_64-linux-gnu configured with: ../src/configure -v --with-pkgversion='ubuntu 7.3.0-16ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/readme.bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --with-as=/usr/bin/x86_64-linux-gnu-as --with-ld=/usr/bin/x86_64-linux-gnu-ld --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu thread model: posix gcc version 7.3.0 (ubuntu 7.3.0-16ubuntu3) --extra-ldexeflags="-no-pie -fno-pic -fno-pie"を渡そうとしましたが、役に立ちませんでした。 libaomをコンパイルしようとすると、同じ問題が発生します。古いバージョンのgccをインストールしようとしましたが、5.xでもこの--enable-default-pieオプションがデフォルトで有効になっているため、適切ではありません。どうやらこのオプションはubuntu18.04で強制されており、それを回避する方法はありません。libaomをインストールしようとしたときの私のエラーです:64%] linking cxx executable examples/decode_with_drops /usr/bin/x86_64-linux-gnu-ld: libaom.a(fwd_txfm_ssse3_x86_64.asm.o): relocation r_x86_64_32 against `.rodata' can not be used when making a pie object; recompile with -fpic /usr/bin/x86_64-linux-gnu-ld: libaom.a(quantize_ssse3_x86_64.asm.o): relocation r_x86_64_32 against `.rodata' can not be used when making a pie object; recompile with -fpic /usr/bin/x86_64-linux-gnu-ld: libaom.a(subpel_variance_sse2.asm.o): relocation r_x86_64_32 against `.rodata' can not be used when making a pie object; recompile with -fpic /usr/bin/x86_64-linux-gnu-ld: libaom.a(highbd_subpel_variance_impl_sse2.asm.o): relocation r_x86_64_32 against `.rodata' can not be used when making a pie object; recompile with -fpic /usr/bin/x86_64-linux-gnu-ld: final link failed: nonrepresentable section on output collect2: error: ld returned 1 exit status cmakefiles/decode_with_drops.dir/build.make:155: recipe for target 'examples/decode_with_drops' failed make[2]: *** [examples/decode_with_drops] error 1 cmakefiles/makefile2:936: recipe for target 'cmakefiles/decode_with_drops.dir/all' failed make[1]: *** [cmakefiles/decode_with_drops.dir/all] error 2 makefile:129: recipe for target 'all' failed make: *** [all] error 2 [編集]:ffmpegコンパイルコマンドを追加します。私のコマンドに投稿されたubuntuコンパイルガイドに従っていましたが、少し異なっていました。サーバーにffmpegをインストールし、libsrt(haivision secure reliable transport protocol)とlibaom(av1)を有効にしているため、ffplayを無効にしました。また、ダウンロードリンクを変更して、最新のナイトリービルドではなく安定した4.0バージョンをダウンロードするようにしました。これは私のffmpegコンパイルコマンドです:cd ~/ffmpeg_sources && \ wget -o ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-4.0.tar.bz2 && \ tar xjvf ffmpeg-snapshot.tar.bz2 && \ cd ffmpeg-4.0 && \ path="$home/bin:$path" pkg_config_path="$home/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$home/ffmpeg_build" \ --pkg-config-flags="--static" \ --extra-cflags="-i$home/ffmpeg_build/include" \ --extra-ldflags="-l$home/ffmpeg_build/lib" \ --extra-libs="-lpthread -lm" \ --bindir="$home/bin" \ --enable-shared \ --enable-gpl \ --enable-nonfree \ --enable-ladspa \ --enable-libsrt \ --enable-libsoxr \ --enable-libspeex \ --enable-avfilter \ --enable-avresample \ --enable-postproc \ --enable-pthreads \ --enable-libfdk-aac \ --enable-libopus \ --enable-libass \ --enable-libtheora \ --enable-libvorbis \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-libfreetype \ --enable-libkvazaar \ --disable-ffplay \ --enable-libopenjpeg \ --enable-libwebp \ --enable-libxvid \ --enable-libvidstab \ --enable-libopenh264 \ --enable-zlib \ --enable-openssl && \ path="$home/bin:$path" make -j8 && \ sudo make install && \ hash -r
回答: 別のgccをインストールしたり、pieの問題に対処したりすることなく、libaomのコンパイル手順を含めるようにガイドを更新しました。cd ~/ffmpeg_sources && \ git -c aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \ mkdir aom_build && \ cd aom_build && \ path="$home/bin:$path" cmake -g "unix makefiles" -dcmake_install_prefix="$home/ffmpeg_build" -denable_shared=off -denable_nasm=on ../aom && \ path="$home/bin:$path" make && \ make install これらの指示は変更される可能性があります。最新の手順については、常に ffmpeg wiki:compiling for ubunt を参照してください。次に、ガイドに示されているようにffmpegをコンパイルします。