ffmpeg-工程编译

CMakeLists.txt

cmake_minimum_required(VERSION 3.17)
project(ffmpeg_demo)

# 设置ffmpeg依赖库及头文件所在目录,并存进指定变量
set(ffmpeg_libs_DIR /opt/ffmpeg/lib/)
set(ffmpeg_headers_DIR /opt/ffmpeg/include/)

# 对于find_package找不到的外部依赖库,可以用add_library添加
# SHARED表示添加的是动态库
# IMPORTED表示是引入已经存在的动态库

add_library( avcodec SHARED IMPORTED)
add_library( avfilter SHARED IMPORTED )
add_library( swresample SHARED IMPORTED )
add_library( swscale SHARED IMPORTED )
add_library( avformat SHARED IMPORTED )
add_library( avutil SHARED IMPORTED )

#指定所添加依赖库的导入路径
set_target_properties( avcodec PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavcodec.so )
set_target_properties( avfilter PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavfilter.so )
set_target_properties( swresample PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libswresample.so )
set_target_properties( swscale PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libswscale.so )
set_target_properties( avformat PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavformat.so )
set_target_properties( avutil PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavutil.so )

# 添加头文件路径到编译器的头文件搜索路径下,多个路径以空格分隔
include_directories( ${ffmpeg_headers_DIR} )
link_directories(${ffmpeg_libs_DIR} )

set(CMAKE_CXX_STANDARD 14)
add_executable(ffmpeg_demo main.c)
target_link_libraries(${PROJECT_NAME}  avcodec avformat avutil swresample swscale swscale avfilter )

main.c代码

#include <stdio.h>

#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/avfilter.h>
#include <libavutil/log.h>
int main(void)
{
  printf("Hello 3\n");
  av_log_set_level(AV_LOG_DEBUG);
  av_log(NULL,AV_LOG_INFO,"...%s\n","hello");
  printf("over\n");
  
  return 0;
}

直接运行出现缺少库的情况

  • 方法一:添加库路径到/etc/ld****的配置文件下
  • 方法二:添加系统环境变量-临时
  • 方法三:添加系统环境变量配置文件bashrc-永久
    img

参考链接


Makefile

TARGET = media_info
CC = gcc

DIR = $(shell pwd)
DIR_OBJ = $(DIR)/obj
DIR_SRC = $(DIR)/src
DIR_INC = $(DIR)/inc

SRC = $(wildcard $(DIR_SRC)/*.c)
SRC_NO_DIR = $(notdir $(SRC))
SRC_OBJ = $(patsubst %c, %o, $(SRC_NO_DIR))

INC = -I$(DIR_INC) \
	  -I../bin/include/ \
	  -I../bin/include/libavformat/ \
	  -I../bin/include/libavutil/ \

LIB_PATH = -L../bin/lib

LIB = -lavformat
LIB += -lavutil
LIB += -lavcodec

$(TARGET):$(addprefix $(DIR_OBJ)/, $(SRC_OBJ))
	$(CC) -o $@ $^ $(INC) $(LIB_PATH) $(LIB) 
	@echo "======= ffmpeg make successs ======="

$(DIR_OBJ)/%.o:$(DIR_SRC)/%.c
	@mkdir -p $(DIR_OBJ)
	$(CC) -c $< -o $@ $(INC) $(LIB_PATH) $(LIB) 

.PHONY:clean
clean:
	-rm -rf $(DIR_OBJ)
	-rm $(TARGET)
	-rm $(DIR)/../$(TARGET)
	
install:
	cp $(TARGET) $(DIR)/..
posted @ 2022-11-25 11:26  starc的miao  阅读(73)  评论(0)    收藏  举报