+ -
当前位置:首页 → 问答吧 → [问题]无法编译支援 DirectFB 的 MPlayer

[问题]无法编译支援 DirectFB 的 MPlayer

时间:2009-04-30

来源:互联网

我在交叉编译MPlayer时有加上 --enable-directfb,但是在make时发生can't find -ldirectfb,但是我的相关路径确实有该函式库,后来网路搜寻有人说要安装 "Install directfb and driverfb-dev package",我却找不到driverfb-dev package这个东东。

有人曾经顺利交叉编译支援DirectFB video output的 MPlayer,请给个指导。

作者: lkmalone   发布时间: 2009-04-30

先确定有/usr/lib/libdirectfb.so 或是在 /etc/ld.so.conf中指定的目录下。

mplayer可以支援directfb输出的。

作者: 阿信   发布时间: 2009-04-30

我在编译MPlayer时有指定DirectFB得标头档跟函式库的路径给它,例如
--with-extraincdir=/home/will/directfb/include
--with-extralibdir=/home/will/directfb/lib
当然DirectFB的函式库是经过我交叉编译过后的,但还是会发生can't find -ldirectfb,我猜我交叉编译的函式库或许不是MPlayer要的,想请问您是编译哪一个DirectFB的套件。

然后我是在做交叉编译不懂为何要确定有/usr/lib/libdirectfb.so,那边放的档案应该是一般GCC编译的吧。不过我确定/usr/lib/libdirectfb.so是有的,但还是一样can't find -ldirectfb

作者: lkmalone   发布时间: 2009-04-30

先确认有没有安装 "libdirectfb-dev"

作者: wiz   发布时间: 2009-04-30

lkmalone 写:我在编译MPlayer时有指定DirectFB得标头档跟函式库的路径给它,例如
--with-extraincdir=/home/will/directfb/include
--with-extralibdir=/home/will/directfb/lib
当然DirectFB的函式库是经过我交叉编译过后的,但还是会发生can't find -ldirectfb,我猜我交叉编译的函式库或许不是MPlayer要的,想请问您是编译哪一个DirectFB的套件。

然后我是在做交叉编译不懂为何要确定有/usr/lib/libdirectfb.so,那边放的档案应该是一般GCC编译的吧。不过我确定/usr/lib/libdirectfb.so是有的,但还是一样can't find -ldirectfb


Hi, 小弟是好玩,想把mplayer + directfb po到板子上去,当时用的是directfb-1.0.1的版本。

整段过程是一个一个cross-compile,lkmalone兄似乎没提到directfb是不是自已cross-compile,所以弟认为是你的directfb是未经过cross-compile而直接安装某个平台的package.

这样会造成即使有so档和 header 档,也是无法编译。

作者: 阿信   发布时间: 2009-05-01

这是我的错误:
/arm-linux-gnueabi/bin/ld: cannot find -ldirectfb
collect2: ld returned 1 exit status
make: *** [mplayer] Error 1

我的directfb有经过cross-compile,但还是显示cannot find -ldirectfb,这让我感到困惑。

我的编译过程是先cross-compile directfb,再利用编译过的 lib 跟 .h 档cross-compile mplayer ,请问这样的作法有少步骤吗??

然后 wiz兄 所说的确认有没有安装 "libdirectfb-dev",libdirectfb-dev要从哪里下载勒,网路搜寻都找不到??

作者: lkmalone   发布时间: 2009-05-04

lkmalone 写:这是我的错误:
/arm-linux-gnueabi/bin/ld: cannot find -ldirectfb
collect2: ld returned 1 exit status
make: *** [mplayer] Error 1

我的directfb有经过cross-compile,但还是显示cannot find -ldirectfb,这让我感到困惑。

我的编译过程是先cross-compile directfb,再利用编译过的 lib 跟 .h 档cross-compile mplayer ,请问这样的作法有少步骤吗??

然后 wiz兄 所说的确认有没有安装 "libdirectfb-dev",libdirectfb-dev要从哪里下载勒,网路搜寻都找不到??


Hi,

不晓得您是将directfb cross compile装在那个路径,如果是/usr/local的话,可以利用

pkg-config --libs --cflags directfb

小弟的机器上会显示:
-D_REENTRANT -I/usr/local/include/directfb -L/usr/local/lib -ldirectfb -lz -lfusion -ldirect -lpthread -ldl

再利用这一串来设定
--extra-libs=FLAGS extra linker flags
--extra-libs-mplayer=FLAGS extra linker flags for MPlayer
--extra-libs-mencoder=FLAGS extra linker flags for MEncoder
--with-extraincdir=DIR extra header search paths in DIR (*)
--with-extralibdir=DIR extra linker search paths in DIR (*)

试试看吧

作者: 阿信   发布时间: 2009-05-05

我找到解决的方法,就是在交叉编译时编译选项不要加上--enable-static,就可以顺利编译完成。而且我想要加入支援alsa audio output时,如果编译选项有--enable-static的话,./configure 会侦测不到alsa的相关 lib。有人知道为什么编译MPlayer时加入--enable-static会有以上类似的怪问题勒??

再来我使用MPlayer时发现个小问题分享给大家,在一般安装下MPlayer的video output会使用fbdev,建议手动改为使用fbdev2,方法如下:
./mplayer -vo help --->列出所有MPlayer支援的video output
./mplayer -vo fbdev2 影片档名--->使用fbdev2播放影片

为何要使用fbdev2 呢?原因如下:
面板的资料传输有分为16 bpp跟32 bpp(目前使用的大都这两种格式ㄅ),32 bpp的面板使用fbdev播放时会有问题,而fbdev2 在播放16 bpp跟32 bpp的面板时都很顺畅没问题。

在此感谢所有回答我问题的朋友们,谢谢你们的热情帮助,如果我以上所说有错误的话,麻烦各位留言指导。

作者: lkmalone   发布时间: 2009-05-13

发生这个问题的原因是因为cross-compiler找不到directfb
而这要从cross-compiler的内定的联结程式库的路径上去找
不是放在/usr/lib里
也不是放在/usr/local/lib里
一般来说我们都会先建一个arm的环境的root file system
比如说 /usr/local/armenv/
然后先在/usr/local/armenv下 建立出bin etc dev lib home root sbin usr var tmp 等路径
这时候建议的做法是
将基本标准的函式库 例如 uclibc 的libc与libm以及libpthread 的程式库放在armenv的lib底下
将基本标准的include 档 放在 armenv/usr/include底下
至於放的方式最好是先放linux-kernel header 使用 kernel source 的make header-install 指令安装进去
然后再把uclibc的标头档也放在 armenv/usr/include底下
接下来到directfb官网下载directfb的原始包
这时候在cross-compiler的编译过程当中要先指定好-with-sysroot的方式把系统路径指定到/usr/local/armenv里
directfb编好之后就把include档放到armenv/usr/include 而so档就放到armenv/usr/lib里
最后再编译mplayer
不过这个时候切记一点
因为mplayer的configure 是无法直接指定到arm环境里的程式库的
主要的原因出在於libtool这只程式上
所以在mplayer里的libtool需要手动改支援到arm 的程式库的路径
才有办法正常编译
一般来说我们都是手动改它
有时候是先用configure先做出Makefile
然后再去修改Makefile的内容
或者你也可以试著自己去制作一个专属於自己arm开发环境下的mplayer 的Makefile
不过都会很覆杂就是了
建议你可以从Android的source当中 有个build的路径下
去参考人家android 的makefile的制作方式

作者:   发布时间: 2010-06-14