Linux下ffmpeg库的编译链接
/usr/bin/ld: /usr/local/ffmpeg/lib/libavformat.a(aviobuf.o): in function `ff_crc04C11DB7_update':
/home/ann/FFmpeg/ffmpeg/libavformat/aviobuf.c:568: undefined reference to `av_crc_get_table'
/usr/bin/ld: /home/ann/FFmpeg/ffmpeg/libavformat/aviobuf.c:568: undefined reference to `av_crc'
/usr/bin/ld: /usr/local/ffmpeg/lib/libavformat.a(aviobuf.o): in function `ff_crcEDB88320_update':
/home/ann/FFmpeg/ffmpeg/libavformat/aviobuf.c:574: undefined reference to `av_crc_get_table'
/usr/bin/ld: /home/ann/FFmpeg/ffmpeg/libavformat/aviobuf.c:574: undefined reference to `av_crc'
...................(省略)
在Linux下调用ffmpeg的库libavutil, libavformat 时,报出了以上一大堆错误。全是各种库找不到的问题。记录一下解决办法:将ffmpeg提供的所有.pc文件所在的路径加入环境变量PKG_CONFIG_PATH中,使用pkg-config对源代码编译链接。
在ffmpeg的安装目录中,ffmpeg在lib/提供了一个目录pkgconfig,里面存放了各种.pc文件。

在~/.bashrc末尾加上两行:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig/
export PKG_CONFIG_PATH
然后source .bashrc就行了。之后使用pkg-config进行编译链接:
gcc -o ffmpeg_dir ffmpeg_dir.c `pkg-config --cflags --libs libavutil libavformat`
编译成功:

pkg-config
pkg-config是Linux下的一个工具,可以用 sudo apt install pkg-config 安装。pkg-config 用于获得一个库/模块与编译链接相关的信息。如:
pkg-config libavutil --cflags --libs
获取与 libavutil 的include 地址以及库/模块的地址:

可用pkg-config显示的模块信息需要将对应的.pc文件加入环境变量PKG_CONFIG_PATH下。如,我这里libavutil.pc所在目录为/usr/local/ffmpeg/lib/pkgconfig, 所以只有当环境变量PKG_CONFIG_PATH包含路径/usr/local/ffmeg/lib/pkgconfig时,pkg-config libavutil --cflags --libs 才能输出该模块相关的信息。
或者:.pc文件在/usr/lib目录下。
Linux下ffmpeg库的编译链接的更多相关文章
- Linux下FFmpeg的安装编译过程【转】
本文转载自:http://www.linuxidc.com/Linux/2013-06/85628.htm 详细说下在Linux下FFmpeg的安装编译过程.参考 Ubuntu 10.04安装编译FF ...
- linux下json库的编译及例程
.下载JsonCpp http://sourceforge.net/projects/jsoncpp/files/ .下载scons http://sourceforge.net/projects/s ...
- Linux下boost库的编译、安装详解
下载boost源码 boost下载地址 解压到一个目录 tar -zxvf boost_1_66_0.tar.gz 编译boost库 进入boost_1_66_0目录中 cd boost_1_66_0 ...
- 深入理解LINUX下动态库链接器/加载器ld-linux.so.2
[ld-linux-x86-64.so.2] 最近在Linux 环境下开发,搞了好几天 Compiler 和 linker,觉得有必要来写一篇关于Linux环境下 ld.so的文章了,google上搜 ...
- 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH
谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...
- Linux下动态库生成和使用
Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...
- Linux下静态库生成和使用
Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. ...
- linux下静态库和动态库一些东西
http://www.cnblogs.com/changefuture/archive/2011/12/22/2297460.html Linux 动态链接库和静态库示例 文件预览 文件目录树如下, ...
- [转]Caffe在Linux下的安装,编译,实验
Caffe在Linux下的安装,编译,实验 原文地址:http://www.cnblogs.com/evansyang/p/6150118.html 第一部分:Caffe 简介 caffe是有伯克利 ...
- Linux下librdkafka客户端的编译运行
Linux下librdkafka客户端的编译运行 librdkafka是一个开源的Kafka客户端C/C++实现,提供了Kafka生产者.消费者接口. 由于项目需要,我要将Kafka生产者接口封装起来 ...
随机推荐
- Linux编写Shell脚本获取指定目录下所有文件并处理
Linux编写Shell脚本获取指定目录下所有文件进行处理并保存到新目录 #!/bin/bash app_name="shell" path="/dir" #原 ...
- JavaScript语法-字符串模板
目录 JavaScript 模板字符串 代码 问题 初学者容易出现的错误 调用函数的情况 JavaScript 模板字符串 代码 以下是index.js的部分代码: onShareAppMessage ...
- #直径,线段树#51nod 1766 树上的最远点对
题目 多组询问,在 \([a,b]\) 和 \([c,d]\) 中分别选一个点 \(x,y\) ,使得 \(dis(x,y)\) 最大 分析 考虑直径的一个性质,两个点集两条直径的四个端点可能成为合并 ...
- #树状数组#洛谷 5677 [GZOI2017]配对统计
题目 分析 考虑处理出所有右端点的能够匹配的左端点,然后用树状数组离线查询 代码 #include <cstdio> #include <cctype> #include &l ...
- Jetty的threadpool模块
Jetty提供的线程池相关的模块,如下: threadpool threadpool-virtual,使用JDK 21提供的virtual threads. threadpool-virtual-pr ...
- 【直播回顾】参与ArkUI,共建OpenHarmony繁荣生态
5月31日晚上19点,战"码"先锋第三期直播 <参与ArkUI,共建OpenHarmony繁荣生态> ,在OpenHarmony社群内成功举行. 本期课程,由华为终 ...
- C# PropertyChanged 事件-数据绑定
在.NET平台上,数据绑定是一项令人十分愉快的技术.利用数据绑定能减少代码,简化控制逻辑. 通常,可以将某个对象的一个属性绑定到一个可视化的控件上,当属性值改变时,控件上的显示数据也随之发生变化.要实 ...
- 拥抱开源更省钱「GitHub 热点速览」
免费.低成本.自托管.开源替代品...这些词就是本周的热门开源项目的关键字.常见的 AI 提升图片分辨率的工具,大多是在线服务或者调用接口的客户端,而「Upscaler」是一款下载即用的免费 AI 图 ...
- 阿里开源的32B大模型到底强在哪里?
阿里巴巴最近开源了一个320亿参数的大语言模型Qwen1.5-32B,网上都说很强很强,那么它到底强在哪里呢? 更高的性价比 Qwen1.5-32B中的B是billion的意思,也就是10亿,32B就 ...
- 通过 Traefik Hub 暴露家里的网络服务
Traefik Hub 简介 ️Reference: 你的云原生网络平台 -- 发布和加固你的容器从未如此简单. Traefik Hub 为您在 Kubernetes 或其他容器平台上运行的服务提供一 ...