ffmpeg ubuntu18.04编译报错fcntl64

fcntl,fcntl64均是系统的api提供的文件操作,fcntl64本来是用来解决操作大文件的问题,后面fcntl本身已经解决了这个问题,fcntl64就被舍弃了

系统环境信息:

ubuntu 18.04

root@# cat /etc/issue
Ubuntu 18.04.6 LTS \n \l

root@alg-dev04:~# uname -a
Linux alg-dev04 4.15.0-151-generic #157-Ubuntu SMP Fri Jul 9 23:07:57 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

root@alg-dev04:~# lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           8
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               85
Model name:          Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz
Stepping:            4
CPU MHz:             2294.608
BogoMIPS:            4589.21
L1d cache:           32K
L1i cache:           32K
L2 cache:            1024K
L3 cache:            25344K
NUMA node0 CPU(s):   0-7

为了按照需要开启ffmpeg的特定功能,需要源码安装ffmpeg

源码下载地址:

Download FFmpeg

wget https://ffmpeg.org/releases/ffmpeg-6.0.1.tar.bz2tar -xvf ffmpeg-6.0.1.tar.bz2./configure && make -j32

报错信息如下:

AR      libavcodec/libavcodec.a
LD      ffmpeg_g
LD      ffprobe_g
LD      ffplay_g
libavdevice/libavdevice.a(oss.o): In function `ff_oss_audio_open':
/root/xingqiao/ffmpeg-6.0.1/libavdevice/oss.c:63: undefined reference to `fcntl64'
libavformat/libavformat.a(network.o): In function `ff_socket':
/root/xingqiao/ffmpeg-6.0.1/libavformat/network.c:195: undefined reference to `fcntl64'
libavformat/libavformat.a(os_support.o): In function `ff_socket_nonblock':
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:221: undefined reference to `fcntl64'
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:219: undefined reference to `fcntl64'
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:221: undefined reference to `fcntl64'
libavformat/libavformat.a(file.o):/root/xingqiao/ffmpeg-6.0.1/libavformat/file.c:208: more undefined references to `fcntl64' follow
libavdevice/libavdevice.a(oss.o): In function `ff_oss_audio_open':
/root/xingqiao/ffmpeg-6.0.1/libavdevice/oss.c:63: undefined reference to `fcntl64'
libavformat/libavformat.a(network.o): In function `ff_socket':
/root/xingqiao/ffmpeg-6.0.1/libavformat/network.c:195: undefined reference to `fcntl64'
libavformat/libavformat.a(os_support.o): In function `ff_socket_nonblock':
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:221: undefined reference to `fcntl64'
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:219: undefined reference to `fcntl64'
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:221: undefined reference to `fcntl64'
libavformat/libavformat.a(file.o):/root/xingqiao/ffmpeg-6.0.1/libavformat/file.c:208: more undefined references to `fcntl64' follow
libavdevice/libavdevice.a(oss.o): In function `ff_oss_audio_open':
/root/xingqiao/ffmpeg-6.0.1/libavdevice/oss.c:63: undefined reference to `fcntl64'
libavformat/libavformat.a(network.o): In function `ff_socket':
/root/xingqiao/ffmpeg-6.0.1/libavformat/network.c:195: undefined reference to `fcntl64'
libavformat/libavformat.a(os_support.o): In function `ff_socket_nonblock':
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:221: undefined reference to `fcntl64'
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:219: undefined reference to `fcntl64'
/root/xingqiao/ffmpeg-6.0.1/libavformat/os_support.c:221: undefined reference to `fcntl64'
libavformat/libavformat.a(file.o):/root/xingqiao/ffmpeg-6.0.1/libavformat/file.c:208: more undefined references to `fcntl64' follow
collect2: error: ld returned 1 exit status
Makefile:131: recipe for target 'ffmpeg_g' failed
make: *** [ffmpeg_g] Error 1
make: *** Waiting for unfinished jobs....
collect2: error: ld returned 1 exit status
Makefile:131: recipe for target 'ffprobe_g' failed

调整配置命令也是无效:调整为gcc8,无法解决问题

./configure --cc=gcc-8 --enable-static --disable-shared --extra-libs=-lc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-asm --enable-pic --disable-x86asm --extra-ldflags="-Wl,--no-as-needed,-rpath=/usr/lib/gcc/x86_64-linux-gnu/8" --target-os=linux --arch=x86_64 --extra-cxxflags="-fPIC" --ignore-tests --enable-debug=3

root@alg-dev04:~# ldd --version
ldd (GNU libc) 2.29
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
root@alg-dev04:~# 

理论上来说的话,glibc的库的这个版本应该是兼容fcntl64的

编译器版本:

root@alg-dev04:~# gcc --version
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

查看源码 是否包含相应的fcntl64的代码调用:发现只有中间文件存在,源码并没有

root@alg-dev04:~/xingqiao/ffmpeg-6.0.1# grep -lr "fcntl64" ./
./libavformat/libavformat.a
./libavformat/network.o
./libavformat/os_support.o
./libavformat/file.o
./libavdevice/libavdevice.a
./libavdevice/oss.o
./libavutil/file_open.o
./libavutil/libavutil.a

猜测应该是ffmpeg的某些依赖库调用了fcntl64,如此的话,重点就是分析glibc的是否真的存在fcntl64

但是全局搜索发现存在多个glibc的库,不知道ldd默认调用的是哪个,查看默认路径下的

root@alg-dev04:~/xingqiao# nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC
0000000000000000 A GLIBC_2.10
0000000000000000 A GLIBC_2.11
0000000000000000 A GLIBC_2.12
0000000000000000 A GLIBC_2.13
0000000000000000 A GLIBC_2.14
0000000000000000 A GLIBC_2.15
0000000000000000 A GLIBC_2.16
0000000000000000 A GLIBC_2.17
0000000000000000 A GLIBC_2.18
0000000000000000 A GLIBC_2.2.5
0000000000000000 A GLIBC_2.2.6
0000000000000000 A GLIBC_2.22
0000000000000000 A GLIBC_2.23
0000000000000000 A GLIBC_2.24
0000000000000000 A GLIBC_2.25
0000000000000000 A GLIBC_2.26
0000000000000000 A GLIBC_2.27
0000000000000000 A GLIBC_2.3
0000000000000000 A GLIBC_2.3.2
0000000000000000 A GLIBC_2.3.3
0000000000000000 A GLIBC_2.3.4
0000000000000000 A GLIBC_2.4
0000000000000000 A GLIBC_2.5
0000000000000000 A GLIBC_2.6
0000000000000000 A GLIBC_2.7
0000000000000000 A GLIBC_2.8
0000000000000000 A GLIBC_2.9
0000000000000000 A GLIBC_PRIVATE
root@alg-dev04:~/xingqiao# nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep fcntl
0000000000110550 W __fcntl
0000000000110550 W fcntl

可见版本和ldd匹配,而且此库中并没有实现fcntl64,所以考虑升级glibc的版本,但是由于系统ubuntu18.04和此内核版本官方源提供的匹配版本就是如上的版本,尝试源码编译glibc库31版本,然后手动源码安装成功,ffmpeg可以编译成功,并且不会报错,但是切换到此路径下的glibc库的话,系统很多的命令都会报段错误,所以,glibc并不能如此的在系统下升级

最后的处理方案:

1.升级操作系统到Ubuntu 20.04.3 LTS,如此可以解决问题

2.使用docker镜像隔离,选择docker ubuntu:latest最新的镜像,系统版本:

root@ubuntu-ffmpeg-cuda:/data# cat /etc/issue
Ubuntu 24.04 LTS \n \l
root@ubuntu-ffmpeg-cuda:/data# ldd --version
ldd (Ubuntu GLIBC 2.39-0ubuntu8.1) 2.39

遇到类似问题若有更好的方案请留言,非常感谢,而且并没有确认是哪个库引入的fcntl64,按照介绍64位新系统,大文件操作,fcntl已经OK了,并不需要调用fcntl64,但是GNU的库存在前向兼容问题

查看过:fcntl.h 通过调整ffmpeg编译的时候的宏定义并没有什么效果

vim /usr/local/include/fcntl.h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3019698.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

DLP数据防泄密软件推荐盘点:防泄密软件厂商

数据防泄密软件在当今的数字化时代扮演着至关重要的角色。随着信息技术的迅猛发展,企业、组织乃至个人面临着日益严峻的数据安全挑战。数据防泄密软件应运而生,为信息安全领域筑起了一道坚实的防线。以下是五款备受推崇的数据防泄密软件,它们…

【工具】Office/WPS 插件|AI 赋能自动化生成 PPT 插件测评 —— 必优科技 ChatPPT

本文参加百度的有奖征文活动,更主要的也是借此机会去体验一下 AI 生成 PPT 的产品的现状,因此本文是设身处地从用户的角度去体验、使用这个产品,并反馈最真实的建议和意见,除了明确该产品的优点之外,也发现了不少缺陷和…

[C++基础编程]----预处理指令简介、typedef关键字和#define预处理指令之间的区别

目录 引言 正文 01-预处理指令简介 02-typedef关键字简介 03-#define预处理指令简介 04-#define预处理指令和typedef关键字的区别 (1)原理不同 (2)功能不同 &#xf…

IP协议全解析:网络层通信的基石

⭐小白苦学IT的博客主页⭐ ⭐初学者必看:Linux操作系统入门⭐ ⭐代码仓库:Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统❤ 前言 在数字化时代的浪潮中,网络通信无处不在,它连接着世界的每一个角落,承载着信息的高…

FileLink跨网文件交换的交换方式:满足不同场景下的文件交换需求

FileLink,作为一款创新的文件交换工具,不仅满足了用户在日常生活中对文件传输的需求,更在技术上实现了跨网文件交换的突破。其独特之处在于支持邮件方式投递、文件中转站、网盘模式共享三种交换方式,这使得FileLink能够适应不同场…

3D 交互展示该怎么做?

在博维数孪(Bowell)平台制作3D交互展示的流程相对简单,主要分为以下几个步骤: 1、准备3D模型:首先,你需要有一个3D模型。如果你有3D建模的经验,可以使用3ds Max或Blender等软件自行创建。如果没…

MySQL中的ON DUPLICATE KEY UPDATE和REPLACE

在 MySQL 中,ON DUPLICATE KEY UPDATE 和 REPLACE 语句都可以用来处理插入数据时主键或唯一键冲突的情况,但它们在处理冲突的方式上有所不同。它们有以下区别: 行为方式: ON DUPLICATE KEY UPDATE:当插入的数据行存在冲…

【智能安防监控补光灯调光芯片方案】单节锂电降压恒流驱动芯片FP8013 最大输出3A体积小/静态功耗低/效率高/支持无频闪调光

文章目录 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 随着智能安防监控技术的不断发展,补光灯的关键性能也日益受到重视。为了提供更好的夜间监控效果,我们需要一种高效、稳定的调光芯片来驱动补光灯的亮…

vue 文本中的\n 、<br>换行显示

一、背景&#xff1a; 后端接口返回数据以\n 作为换行符&#xff0c;前端显示时候需要换行显示&#xff1b; demo&#xff1a; <p style"white-space: pre-wrap;">{{ info }}</p>data() {return {info: 1、优化图片\n 2、 优化时间\n}},项目上&#…

嘎嘎好用的虚拟键盘第二弹之中文输入法

之前还在为不用研究输入中文而暗自窃喜 这不新需求就来了&#xff08;新需求不会迟到 它只是在路上飞一会儿&#xff09; 找到了个博主分享的代码 是好使的 前端-xyq 已经和原作者申请转载了 感谢~~ 原作者地址&#xff1a;https://www.cnblogs.com/linjiangxian/p/16223681.h…

日志打印传值 传引用 右值引用性能测试(Linux/QNX)

结论 Linux平台和qnx平台优化后传值性能都是比传引用的差&#xff0c;也比传右值的差&#xff0c;因此传参时有必要传递引用。 测试代码 #include <cstdint> #include <ctime> #include <string>#ifdef __linux__#define ITERATIONS 10000000 #else#defin…

《Linux运维总结:ARM64架构CPU基于docker-compose一离线部署rabbitmq 3.10.25容器版镜像模式集群工具》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

最新闲鱼小众蓝海虚拟资源,单号日入300+,三天必起店,矩阵放大月入1-2W

详情介绍 本项目售卖的虚拟资源非常小众&#xff0c;宅男的最爱&#xff0c;并且市场一片蓝海&#xff01;只需一步手机&#xff0c;随时随地操作项目&#xff0c;流量巨大&#xff0c;安装教程方法操作三天必起店&#xff0c;消息多到回不过来&#xff0c;一天轻松出个大几十单…

Stable Diffusion Ai绘画模型推荐:二次元Coriander_Mix v1大模型推荐

负tag嵌入式:EasyNegative,badhandv4 此模型经测试是写实偏3D的效果 画质灰暗的话请加&#xff1a;VAE840000 或者负tag&#xff1a;(watermark:2),(blurry:2),fat,paintings,sketches,(worst quality:2),(low quality:2),(normal quality:2),((monochrome)), ((grayscale))…

韩国站群服务器如何提升网站性能与用户体验?

韩国站群服务器如何提升网站性能与用户体验? 在当今数字化时代&#xff0c;网站性能和用户体验对于吸引和保留用户至关重要。为了提供快速、稳定和优质的服务&#xff0c;越来越多的网站管理员开始利用韩国站群服务器来优化其网站性能。本文将探讨如何利用韩国站群服务器来提…

PLM系统推荐:产品全生命周期管理最佳解决方案

PLM系统推荐&#xff1a;产品全生命周期管理最佳解决方案 在当今日益竞争激烈的市场环境中&#xff0c;企业如何高效管理其产品设计、开发和生命周期变得尤为重要。产品生命周期管理&#xff08;PLM&#xff09;系统正是为解决这一难题而诞生的。本文将为您详细介绍几款值得推荐…

AI换脸原理(6)——人脸分割介绍

一、介绍 人脸分割是计算机视觉和图像处理领域的一项重要任务,它主要涉及到将图像中的人脸区域从背景或其他非人脸区域中分离出来。这一技术具有广泛的应用场景,如人脸识别、图像编辑、虚拟背景替换等。 在计算机视觉(CV)领域,经典的分割技术可以主要划分为三类:语义分…

Baidu Comate:智能编码助手,助力编程效率飞跃

文章目录 Baidu Comate智能助手简介安装Baidu ComateBaidu Comate主要功能代码智能补全编程知识问答官方插件函数注释行间注释生成单测代码解释调优建议函数拆分清空对话框help AutoWork工具箱 总结 Baidu Comate智能助手简介 Baidu Comate&#xff0c;Coding Mate Powered by …

临时有事无法及时签字盖章?试试用契约锁设置“代理人”

遇到“领导休假中、在开重要会议、外出考察或者主任医生手术中等”一段时间内不方便或者无法及时签字盖章的情况怎么办&#xff1f;业务推进不了只能干等&#xff1f; 契约锁电子签及印控平台支持印章、签名“临时授权”、“代理签署”&#xff0c;实现指定人、指定时间段、指定…

深入探究MySQL常用的存储引擎

前言 MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;它支持多种存储引擎。存储引擎决定了MySQL数据库如何存储、检索和管理数据。不同的存储引擎具有不同的特点、性能表现和适用场景。选择适合的存储引擎对于优化数据库性能、确保数据完整性和安全性至关重要。本…