CentOS系统下使用maven编译javaCPP-ffmpeg

在尝试使用javaCV调用ffmpeg API时,作者在CentOS系统下遇到编译javaCPP-presets的困难。文章详细记录了使用`mvn install --projects ffmepg`命令编译过程中遇到的avx2指令集不支持问题,导致编译失败。作者进入javacpp-presents源码目录,尝试`mvn install --projects ffmpeg`命令,但因设备不支持avx2导致libvpx目录下的源文件编译出错。为解决此问题,作者修改了cppbuild.sh脚本中的相关编译命令。

由于想要利用javaCV调用ffmpeg的API,遇到了一个很奇怪的错误,在网上查了半天,真的很费力,最终问题还是没有解决,自己被一个问题困扰到了,却没有发现或许这个问题并不是一个问题,现在想想还真是有点郁闷,编译了一天还是没有编译成功。之前看的是(http://www.ibm.com/developerworks/cn/java/j-lo-cpp/)这篇博文的教程,说的很简单,但是中间遇到的问题还是很多的。

1、编译过程中使用mvn install --projects ffmepg命令编译,看到别人说在CentOS系统中,需要自己编译javaCPP-presets这个项目,然后自己就傻傻的跑去编译ffmpeg了,虽然目标不是很明确。编译ffmpeg的原因是,因为在程序中,发现了这样一个错误。

Exception in thread "Thread-2" java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil
	at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
<span style="white-space:pre">	</span>at org.bytedeco.javacpp.Loader.load(Loader.java:464)
<span style="white-space:pre">	</span>at org.bytedeco.javacpp.Loader.load(Loader.java:409)
<span style="white-space:pre">	</span>at org.bytedeco.javacpp.avcodec$AVPacket.<clinit>(avcodec.java:1559)
<span style="white-space:pre">	</span>at org.bytedeco.javacv.FFmpegFrameRecorder.<init>(FFmpegFrameRecorder.java:149)
<span style="white-space:pre">	</span>at org.bytedeco.javacv.FFmpegFrameRecorder.<init>(FFmpegFrameRecorder.java:126)
<span style="white-space:pre">	</span>at javaCVTest1.GrabberShow.convert(GrabberShow.java:34)
<span style="white-space:pre">	</span>at javaCVTest1.GrabberShow.run(GrabberShow.java:64)
<span style="white-space:pre">	</span>at java.lang.Thread.run(Unknown Source)

google了半天还是没有找到解决的方法,所以傻傻的认为,只要自己能够编译ffmpeg成功,自己就能解决这个问题。

2、接下来就是苦逼的编译之路,下载好javacpp-presents源码,解压然后cd进去,然后使用mvn install --projects ffmpeg这条命令,然后就开始编译了。然后就开始报错了,maven就没怎么用过,感觉自己太渣了。说一下最主要的问题吧。

主要的问题是,在编译过程中会遇到avx2这个指令集(磨人的小妖精),由于我使用的设备不支持这个指令集所以编译过不去。主要是因为包含avx2这个指令集的源文件不能编译通过。所以我修改了xx/javacpp-presets/ffmpeg/cppbuild.sh脚本中的一些命令,因为avx2编译出错实在libvpx这个目录下的所以修改cppbuild.sh中对应该目录的执行命令语句

cd ../libvpx-$VPX_VERSION
./configure --prefix=$INSTALL_PATH --enable-static --enable-pic --disable-examples --disable-avx2 --disable-unit_tests --target=x86_64-linux-gcc --as=yasm
make -j $MAKEJ
make install
里面的--disable-avx2 --disable-unit_tests是我自己加的,目的是想要跳过avx2的编译过程,还有测试过程,因为测试过程中也会涉及到avx2指令集的一些参数,添加这两个参数之后,libvpx终于可以编译过去了,但是在编译ffmpeg中的libavcodec.so这个库时,里面又开始出现了avx2的相关参数,看到这里真的要疯了,又报错了,生无可恋,有大神看到的话可以帮忙看看,求帮助啊。

libavcodec/libavcodec.so: undefined reference to `vpx_sub_pixel_variance64x64_avx2'
libavcodec/libavcodec.so: undefined reference to `vpx_variance32x32_avx2'
libavcodec/libavcodec.so: undefined reference to `vpx_fdct32x32_rd_avx2'
libavcodec/libavcodec.so: undefined reference to `vpx_mse16x16_avx2'
libavcodec/libavcodec.so: undefined reference to `vpx_variance32x16_avx2'
libavcodec/libavcodec.so: undefined reference to `vpx_get16x16var_avx2'
libavcodec/libavcodec.so: undefined reference to `vpx_sad64x32_avg_avx2'
collect2: error: ld returned 1 exit status
然后我把ffmpeg的configure配置命令也加上了--disable-avx2,但是还是出现了上边的问题,然后我又加上了--disable-avcodec这个参数结果出现了下边这个错误,我就崩溃了。
If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.log" produced by configure as this will help
solve the problem.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
哎,真是千难万难啊。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值