按照licheepinaono的指导手册编译好了UBOOT,使用buildroot自带的编译器编译了主线linux和rootfs,将SDL编译好的lib下得文件拷到了nano的跟文件系统、/usr/lib下,交叉编译了一个测试程序,就是初始化一下SDL就退出了。运行的时候提示Illegal instruction,同样编译了helloworld是可以运行的,应该不是编译器问题,文件系统和内核都是用的这个编译器,现在搞不清楚问题出在哪,linux菜鸟一个,请教大神建议。
SDL配置
./configure --prefix=/home/yuan/work/SDL2-2.0.9/SDLlib --disable-video-nanox \
--disable-video-qtopia \
--disable-video-photon \
--disable-video-direct \
--disable-video-ggi \
--disable-video-svga \
--disable-video-aalib \
--disable-video-dummy \
--disable-video-dga \
--enable-video-fbcon \
--disable-arts \
--disable-esd \
--disable-alsa \
--disable-video-x11 \
--disable-nasm \
--disable-debug \
--disable-joystick-amigaos \
--disable-joystick-beos \
--disable-joystick-bsd \
--disable-joystick-darwin \
--disable-joystick-dc \
--disable-joystick-linux \
--disable-joystick-macos \
--disable-joystick-mint \
--disable-joystick-win32 \
--disable-joystick \
--disable-input-tslib \
--host=arm-none-linux-gnueabi \
--build=i386
程序编译
arm-none-linux-gnueabi-gcc -I/home/yuan/work/SDL2-2.0.9/SDLlib/include -L/home/yuan/work/SDL2-2.0.9/SDLlib/lib main.c -o main -lSDL2
离线
回大神,我又检查了一遍编译链工具,发现之前是从buildroot的dl文件夹里面拷出来的arm-none-linux-gnueabi-2014.5,现在我直接换成了buildroot里面output/host下的编译好的工具链,这样编译的程序不再报非法指令了,又出现新问题了,运行显示一张BMP图片的程序,提示初始化失败,没有设备。Could not initialize SDL - No available video device。又不知道问题出在哪边了,唉
离线
你跑的是 buildroot 生成的程序?具体是哪个程序?
不是buildroot生成的程序,是网上找的一段测试程序
#include "SDL2/SDL.h"
#include <stdio.h>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int init();
int loadMedia();
void close();
SDL_Window* gWindow = NULL;
SDL_Surface* gScreenSurface = NULL;
SDL_Surface* gHelloWorld = NULL;
int init()
{
int success = 1;
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
success = 0;
}
else
{
gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if( gWindow == NULL )
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
success = 0;
}
else
{
gScreenSurface = SDL_GetWindowSurface( gWindow );
}
}
return success;
}
int loadMedia()
{
int success = 1;
gHelloWorld = SDL_LoadBMP( "/usr/hello_world.bmp" );
if( gHelloWorld == NULL )
{
printf( "Unable to load image %s! SDL Error: %s\n", "hello_world.bmp", SDL_GetError() );
success = 0;
}
return success;
}
void close()
{
SDL_FreeSurface( gHelloWorld );
gHelloWorld = NULL;
SDL_DestroyWindow( gWindow );
gWindow = NULL;
SDL_Quit();
}
int main( int argc, char* args[] )
{
if( !init() )
{
printf( "Failed to initialize!\n" );
}
else
{
if( !loadMedia() )
{
printf( "Failed to load media!\n" );
}
else
{
SDL_BlitSurface( gHelloWorld, NULL, gScreenSurface, NULL );
SDL_UpdateWindowSurface( gWindow );
SDL_Delay( 2000 );
}
}
close();
return 0;
}
初始化SDL阶段就报错退出了。我就将交叉编译的SDL2库的lib文件拷到了板子的/usr/lib下,然后测试程序和bmp图片放在了/usr下
离线
http://sdl.beuc.net/sdl.wiki/SDL_envvars
#SDL_VIDEODRIVER=fbcon ./test
现在又显示SDL could not initialize! SDL_Error: fbcon not available
Failed to initialize!
我把SDL_FBDEV也设置了/dev/fb0
离线
刚刚下载 最新的 SDL 2.0 代码仔细研究, 发现居然没有 fbcon,
后来一番操作之后, 确认只有 1.2 版本才有 fbcon,
你用的应该是 2.0, 下载一个 1.2 版本再试一试.
谢谢晕哥,换了1.2.15的立马就出图像了,之前搞的晕死了,多谢大神
离线