【问题标题】:Installing ffmpeg with vcpkg使用 vcpkg 安装 ffmpeg
【发布时间】:2021-11-14 16:17:16
【问题描述】:

我已经使用vcpkg install ffmpeg 安装了ffmpeg

当我在我的 cmake 项目中包含依赖项时,如下所示:

find_path(AVCODEC_INCLUDE_DIR libavcodec/avcodec.h)
find_library(AVCODEC_LIBRARY avcodec)
find_path(AVFORMAT_INCLUDE_DIR libavformat/avformat.h)
find_library(AVFORMAT_LIBRARY avformat)
find_path(AVUTIL_INCLUDE_DIR libavutil/avutil.h)
find_library(AVUTIL_LIBRARY avutil)
find_path(AVDEVICE_INCLUDE_DIR libavdevice/avdevice.h)
find_library(AVDEVICE_LIBRARY avdevice)

target_link_libraries(${TARGET_NAME} PRIVATE
        ${AVCODEC_LIBRARY} ${AVFORMAT_LIBRARY} ${AVUTIL_LIBRARY} ${AVDEVICE_LIBRARY}
    )

我的 windows 构建工作正常,但是,在 linux 上,我得到了错误:

[29/29] Linking CXX shared library libjni.so
2021-11-14T12:38:02.510164800Z FAILED: libjni.so 
2021-11-14T12:38:02.510171600Z : && /usr/bin/g++-11 -fPIC -O3 -DNDEBUG   -shared -Wl,-soname,libjni.so -o libjni.so CMakeFiles/jni.dir/src/jni.cpp.o CMakeFiles/jni.dir/src/core/audio.cpp.o CMakeFiles/jni.dir/src/core/files.cpp.o CMakeFiles/jni.dir/src/core/fs/file_utils.cpp.o CMakeFiles/jni.dir/src/core/spectrogram.cpp.o CMakeFiles/jni.dir/src/core/utils.cpp.o -L/usr/lib/gcc/x86_64-linux-gnu/10 -Wl,-rpath,/root/build/Release/_deps/fmt-build  /root/vcpkg/installed/x64-linux/lib/libfftw3f.a  _deps/fmt-build/libfmt.so.8.0.1  _deps/xxhash-build/libxxhash.a  /root/vcpkg/installed/x64-linux/lib/libavcodec.a  /root/vcpkg/installed/x64-linux/lib/libavformat.a  /root/vcpkg/installed/x64-linux/lib/libavutil.a  /root/vcpkg/installed/x64-linux/lib/libavdevice.a  _deps/kistream_proto_cpp-build/libgenerated_srcs.a  -lm  -Wl,--as-needed  /root/vcpkg/installed/x64-linux/lib/libprotobuf.a  -lpthread && :
2021-11-14T12:38:02.510185200Z /usr/bin/ld: /root/vcpkg/installed/x64-linux/lib/libavcodec.a(h264_intrapred_10bit.o): warning: relocation against `ff_pw_512' in read-only section `.text'
2021-11-14T12:38:02.510187600Z /usr/bin/ld: /root/vcpkg/installed/x64-linux/lib/libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile with -fPIC

【问题讨论】:

    标签: linux visual-studio ffmpeg cmake vcpkg


    【解决方案1】:

    我认为,您的问题与位置无关代码有关。编译通过在vcpkg中给出-fPIC选项就可以解决。

    您可以查看this github issue of vcpkg repo。他们举了一个例子,说明如何在 vcpkg 的端口 CMake 文件中添加编译器选项。

    【讨论】: