首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows上将FFmpeg与CMake链接

在Windows上将FFmpeg与CMake链接
EN

Stack Overflow用户
提问于 2021-07-05 11:47:41
回答 1查看 1.2K关注 0票数 0

我刚开始接触CMake,几天来我一直在抓我的头。我下载了FFmpeg源代码并构建了它,没有问题。我有一个lib文件夹和一个包含文件夹,我把它们放在了我的项目结构中:

代码语言:javascript
运行
复制
project
   \--- build
   \--- dep
      \---ffmpeg
         \--- include
         \--- lib
   main.cpp
   CMakeLists.txt

这是我的CMakeLists.txt:

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.19)
project(VidShare)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(VidShare main.cpp)
include_directories(dep/ffmpeg/include)
target_link_libraries(VidShare
        ${CMAKE_SOURCE_DIR}/dep/ffmpeg/lib/libavformat.a
        ${CMAKE_SOURCE_DIR}/dep/ffmpeg/lib/libavcodec.a)

这是我的main.cpp:

代码语言:javascript
运行
复制
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}

#include <iostream>

int main() {
    AVFormatContext *pFormatContext = avformat_alloc_context();
    return 0;
}

一旦我添加了这行代码:AVFormatContext *pFormatContext = avformat_alloc_context();,我就会在CLion中构建时得到这个错误:

代码语言:javascript
运行
复制
[ 50%] Linking CXX executable VidShare.exe
CMakeFiles\VidShare.dir/objects.a(main.cpp.obj): In function `main':
D:/Users/dalla/Documents/Coding Projects/C++/VidShare/main.cpp:9: undefined reference to `avformat_alloc_context'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFiles\VidShare.dir\build.make:107: VidShare.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:94: CMakeFiles/VidShare.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:101: CMakeFiles/VidShare.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:136: VidShare] Error 2

我猜这是一个链接器错误,我不知道如何正确地链接它(可能是我遗漏的一些愚蠢的东西),因为avformat_alloc_context()似乎在头文件中。不管怎样,我很绝望,我会很感激你的帮助。

我正在使用:

  • MinGW
  • CLion
  • Windows 10
  • CMake
EN

回答 1

Stack Overflow用户

发布于 2021-07-06 14:25:59

我成功地在Ubuntu20.04上使用libavcodeclibavformat构建了这个项目。我只是运行sudo apt install libavformat-dev libavcodec-dev来安装avformatavcodec的开发库。至于查找库(在我的例子中是/usr/lib/x86_64-linux-gnu ),我使用了CMake的图书馆函数。

这就是您的CMake文件的样子:

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.19)
project(VidShare)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(VidShare main.cpp)
include_directories(${CMAKE_SOURCE_DIR}/dep/ffmpeg/include)
find_library(AVFORMAT_LIB avformat)
find_library(AVCODEC_LIB avcodec)
target_link_libraries(VidShare ${AVFORMAT_LIB} ${AVCODEC_LIB})

我相信您的dep/ffmpeg/lib目录中的库由于某种原因无法被链接器成功地加载。我使用GNU nm列出符号,但没有发现任何意外或丢失的东西。尽管如此,在可能的情况下使用正式的预编译二进制文件始终是最佳实践。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68255631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档