我似乎无法启动directfb,这样它就可以毫无问题地启动了。
当我试图在dfbcheck(directfbcreate(&dfb))之后访问函数时,会得到“无效参数”;
我试着从教程中运行简单的示例。代码如下:

 #include <stdio.h>
#include <unistd.h>
#include <directfb.h>

static IDirectFB *dfb = NULL;
static IDirectFBSurface *primary = NULL;
static int screen_width  = 0;
static int screen_height = 0;

#define DFBCHECK(x...)                                         \
  {                                                            \
    DFBResult err = x;                                         \
                                                               \
    if (err != DFB_OK)                                         \
      {                                                        \
        fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \
        DirectFBErrorFatal( #x, err );                         \
      }                                                        \
  }

int main (int argc, char **argv)
{
   int argx = 2;
   char *argData[] = {"self","--dfb:system=fbdev,disable-module=keyboard,disable-module=joystick,no-hardware",0};
   char **argPointer = argData;

   DFBSurfaceDescription dsc;
   DFBCHECK (DirectFBInit (&argx,&argPointer));
   DFBCHECK (DirectFBCreate (&dfb));
   DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));
   dsc.flags = DSDESC_CAPS;
   dsc.caps  = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
   DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary ));
   DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height));
   DFBCHECK (primary->FillRectangle (primary, 0, 0, screen_width, screen_height));
   DFBCHECK (primary->SetColor (primary, 0x80, 0x80, 0xff, 0xff));
   DFBCHECK (primary->DrawLine (primary,
                                  0, screen_height / 2,
                   screen_width - 1, screen_height / 2));

   DFBCHECK (primary->Flip (primary, NULL, 0));
   sleep (5);
   primary->Release( primary );
   dfb->Release( dfb );
   return 23;
}

如您所见,我用硬编码字符*提供参数。这是因为我计划从不是从命令行启动的代码中使用directfb。代码是用命令“gcc-i/usr/local/include/directfb dfbtest.c-o dfbtest-ldirectfb”编译的
这将生成错误:
   ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.2.10 |~~~~~~~~~~~~~~~~~~~~~~~~~~
    (c) 2001-2008  The world wide DirectFB Open Source Community
    (c) 2000-2004  Convergence (integrated media) GmbH
  ----------------------------------------------------------------

(*)directfb/core:单个应用程序核心。(2012-05-21 06:43)
(*)直接/线程:启动“VT切换器”(3285)[关键其他/其他0/0]。
(*)直接/模块:抑制模块“操纵杆”
(*)直接/模块:抑制模块“键盘”
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directFB/输入:LID开关(1)0.1(directFB.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directFB/输入:电源按钮(2)0.1(directFB.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directFB/input:sleep按钮(3)0.1(directFB.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directFB/输入:电源按钮(4)0.1(directFB.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directFB/输入:苹果电脑苹果内部K(5)0.1(directFB.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directfb/input:apple computer apple internal k(6)0.1(directfb.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directFB/input:logitech USB-PS/2光学鼠标(7)0.1(directFB.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directFB/输入:appletouch(8)0.1(directFB.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directFB/输入:applesmc(9)0.1(directFB.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directfb/input:hda intel spdif in(10)0.1(directfb.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)directfb/input:hda intel line(11)0.1(directfb.org)
(*)direct/thread:已启动“Linux输入”(-1)[输入其他/其他0/0]。
(*)DirectFB/输入:HDA Intel耳机(12)0.1(directFB.org)
(*)直接/线程:已启动“ps/2 input”(-1)[输入其他/其他0/0]。
(*)directFB/input:imps/2鼠标(1)1.0(directFB.org)
(*)直接/线程:已启动“ps/2 input”(-1)[输入其他/其他0/0]。
(*)directFB/input:imps/2鼠标(2)1.0(directFB.org)
(*)DirectFB/Genefx:检测到并启用了MMX
(*)DirectFB/图形:MMX软件光栅化器0.6(directFB.org)
(*)directFB/core/wm:default 0.3(directFB.org)
(*)fbdev/surface:在偏移量0和节距5888处分配640x480 32位lut8缓冲区(索引0)。
(*)fbdev/模式:设置640x480 lut8
(*)fbdev/模式:在8位(lut8)时切换到640x480(虚拟640x480),间距5888
dfbtest.c:
(#) DirectFBError [dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN)]: Invalid argument!

(!!!)*警告[退出DirectFB没有初始化的应用程序!]*[../../../src/core/core.c:859在dfb_core_deinit_check()中]
如有进一步调试的意见,将不胜感激。我在Ubuntu12上运行这个。一些旧的MacBook Pro有Radeon芯片。如果我在控制台上或X11下运行此命令,结果是相同的。屏幕闪烁,帧缓冲区启动,但在此setcooperativelevel调用上崩溃。

最佳答案

所以这是版本兼容性问题。头部包含的directfb版本比链接的库版本高。与正确版本的directfb库进行链接消除了此问题。

关于c - DirectFB教程无效参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18758188/

10-09 22:14