How to run this DirectFB sample?

I got the following directFB example code: tutorials :

#include <stdio.h> #include <unistd.h> #include <directfb/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) { DFBSurfaceDescription dsc; DFBCHECK(DirectFBInit (&argc, &argv)); 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; } 

And I'm trying to compile and get an error (from gnome-terminal):

 $ g++ Test01HorizontalLine.cpp -I /usr/local/include/directfb/ Test01HorizontalLine.cpp: In function 'int main(int, char**)': Test01HorizontalLine.cpp:27: error: invalid conversion from 'int' to 'DFBSurfaceCapabilities' Test01HorizontalLine.cpp:33: error: invalid conversion from 'int' to 'DFBSurfaceFlipFlags' 

I am using DFB 1.4.11 (I cannot update my current project). How can I run this sample? (Beginner)

- update

After updating the lines (as pointed out by @jclin):

 dsc.caps = DFBSurfaceCapabilities(DSCAPS_PRIMARY | DSCAPS_FLIPPING); ... primary->Flip(primary, NULL, DFBSurfaceFlipFlags(0)); 

result:

 $ g++ Test01HorizontalLine.cpp -I /usr/local/include/directfb/ /tmp/cc6iUS1W.o: In function `main': Test01HorizontalLine.cpp:(.text+0x1c): undefined reference to `DirectFBInit' Test01HorizontalLine.cpp:(.text+0x61): undefined reference to `DirectFBErrorFatal' Test01HorizontalLine.cpp:(.text+0x6d): undefined reference to `DirectFBCreate' Test01HorizontalLine.cpp:(.text+0xb2): undefined reference to `DirectFBErrorFatal' Test01HorizontalLine.cpp:(.text+0x111): undefined reference to `DirectFBErrorFatal' Test01HorizontalLine.cpp:(.text+0x188): undefined reference to `DirectFBErrorFatal' Test01HorizontalLine.cpp:(.text+0x1ef): undefined reference to `DirectFBErrorFatal' Test01HorizontalLine.cpp:(.text+0x26d): undefined reference to `DirectFBErrorFatal' /tmp/cc6iUS1W.o:Test01HorizontalLine.cpp:(.text+0x2e4): more undefined references to `DirectFBErrorFatal' follow collect2: ld returned 1 exit status 
+4
source share
3 answers

Can you try this, because now I do not have such a version.

 dsc.caps = DFBSurfaceCapabilities(DSCAPS_PRIMARY | DSCAPS_FLIPPING); ... primary->Flip(primary, NULL, DFBSurfaceFlipFlags(0)); 
+3
source

My ubuntu12 test works below code, I may have another directfb with you, but it should look like:

 #include <stdio.h> #include <unistd.h> #include <directfb/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) { DFBSurfaceDescription dsc; DFBCHECK(DirectFBInit (&argc, &argv)); DFBCHECK(DirectFBCreate (&dfb)); DFBCHECK(dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN)); dsc.flags = DSDESC_CAPS; dsc.caps = DFBSurfaceCapabilities(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)); primary->Flip(primary, NULL, DFBSurfaceFlipFlags(0)); sleep(5); primary->Release(primary); dfb->Release(dfb); return 23; } 

Create using the command line:

  g++ -o testHorizonLine Test01HorizontalLine.cpp -I/usr/include \ -I/usr/include/directfb -L/usr/lib/i386-linux-gnu -ldirectfb 

To find where libdirectfb.so is located, you can use the linux find , then add the -L option to the g ++ command to include the library path and add -ldirectfb to link the libdirectfb.so file.

 $ find /usr/lib -name libdirectfb.so 

Run testhorizonLine:

  ~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.2.10 |~~~~~~~~~~~~~~~~~~~~~~~~~~ (c) 2001-2008 The world wide DirectFB Open Source Community (c) 2000-2004 Convergence (integrated media) GmbH ---------------------------------------------------------------- (*) DirectFB/Core: Single Application Core. (2012-05-21 06:43) (!) Direct/Util: opening '/dev/fb0' failed --> Permission denied (!) DirectFB/FBDev: Error opening framebuffer device! (!) DirectFB/FBDev: Use 'fbdev' option or set FRAMEBUFFER environment variable. (!) DirectFB/Core: Could not initialize 'system_core' core! --> Initialization error! Test01HorizontalLine.cpp <24>: (#) DirectFBError [DirectFBCreate (&dfb)]: Initialization error! 
+4
source

If you use libraries in your project, including headers, this is only half the work. You should also show where the actual library is located ( libdirectfb.so in your case) so that it can be bound to your code. Do this by passing the -L and -l options (also note , which do not require the lib prefix or externsion.so):

 g++ your_source_file.cpp -I /path/to/include -L/path/to/lib -ldirectfb 

There are many topics on how to use libraries in your projects, that is, you can start here and here.

PS It is always useful to use the -Wall option to see more information about what is happening.

+3
source

All Articles