在Windows下使用MinGW将FFmpeg迁移Android平台错误

自己并不了解C语言所以难免遇上问题,措手不及,如果你出现在1,2,3问题,请直接看最后

先说一下自己的环境:

 

Win10-64

MinGW最新版

NDK-14.1.3816874

ffmpeg-4.0

 

0.CC : Commod...

将MinGW中msys文件夹下的gcc.exe复制一份(一定要复制不能重命名,因为gcc这个命名,MinGW编译中也会用到),将复制的gcc.exe改成cc.exe

1./ffmpeg/... No Such File Or Dir

遇到这个问题我以为是自己建立的sh文件编码错误,发现的确如此,将\r\n修改成\n之后,问题依旧,又以为没有完全安装MinGW中的Gcc编译器,一顿下载之后,发现问题并不在此,搜遍了google也没有发现问题所在,我这时确定问题出在某一个调用文件处理的路径上,也就是说路径错误导致,这时我发现问题提示主要出在makefile上,于是我查看问题下的makefile发现的确是包含所有出现问题的路径,并且他们都共同声明了存在在SRC_PATH这个常量下(类似于windows的环境配置),而文件中并没有定义SRC_PATH路径导致问题发生,我在makefile上定义了SRC_PATH = (自己的ffmpeg路径)之后问题解决部分,为什么是部分,因为还有一些文件还是出现这个问题.像config.h...

于是又去搜google,发现

是的,config,h文件ffmpeg中并没有存在,而是由configure生成的,那么问题来了,我的sh文件中明明调用了configure,而并没有正确的执行,这个问题,我暂时不深究,毕竟对C语言还处于懵懂状态.

于是我首先在ffmpeg路径下的MinGW窗口中,执行了configure文件,生成了一系列缺失的文件.再去执行自己创建的sh文件,问题解决

2.winsock2.h : Including <winsock2.h> after <winsock.h> is unsupported.

意思是说winsock在调用winsock2之前调用了,这个问题的出现也让我绕梁三尺,然后搜索得知,调用winsock2的是MinGW中的windows.h,发现windows.h调用了_winsock.h,发现_winsock.h中已经对系统是32位还是64位做了判断,也就是说winsock是32位使用的,而winsock2才是64位使用的,问题就不是出现在windows.h文件中,那么问题来了,除了windows.h那个文件还会首先调用winsock文件呢?这明明就是MinGW的BUG好吧,于是,我洗了把脸,坐下来,将winsock移到桌面,这样MinGW中就会显示第一个调用winsock的文件的错误信息,ok,果然,提示ptw32_errno.h文件首先调用的winsock.h,问题找到,将ptw32_errno中的winsock.h改成_winsock.h,问题解决.

3.libformat/os_support.c : error : 'ERROR_NOT_ENOUGH_MEMORY' undeclared ( first use in this function) case EAI_MEMORY.

也就是说EAI_MEMORY常量没有定义,导致switch内存溢出.

这个简单,找到os_support.c文件中的EAI_MEMORY删除这个case就可以了.

4./bin/sh : /usr/local/lib/libavdevice.a:No Such File Or Dir

问题来了,/usr/local这个路径对应的是prefix_default这个变量,而prefix_default这个变量最终的指向是PREFIX的,也就是说当没有外部定义PREFIX时,他就会默认这个prefix_default的变量为安装路径,奇怪的是我的sh文件中已经将PREFIX定义了,为什么没有成功呢,问题最后找到了,是因为sh中存在一句在ffmpeg4.0中的configure并没有定义的语句--disable-ffserver \导致的sh文件中的所有配置无效.这真是无限脑洞了,由于习惯了只要程序能够执行下去,中间的error都当成warning来看待,导致一直忽视这个问题出现的.

这也就是说4以上的问题可能存在也可能不存在,因为我之前的编译竟然一直没在用NDK编译,而是windows编译,这真是无可奈花落去,似曾相识燕归来,代码怀里独徘徊/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值