WhyCan Forum

本站无需注册,无需积分,无需回复可下载所有资料,如果真的喜欢小站,请您注册之后请至少回复一个帖子激活Id,谢谢支持! 站长QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-03-10 15:42:12

ArcherEmiya
会员
注册时间: 2019-03-10
累计积分: 6

licheepi nano 移植SDL2运行程序报Illegal instruction

按照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

离线

#2 2019-03-10 15:46:38

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,471

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

你用哪个编译器?

离线

#3 2019-03-11 07:57:17

ArcherEmiya
会员
注册时间: 2019-03-10
累计积分: 6

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

回大神,我又检查了一遍编译链工具,发现之前是从buildroot的dl文件夹里面拷出来的arm-none-linux-gnueabi-2014.5,现在我直接换成了buildroot里面output/host下的编译好的工具链,这样编译的程序不再报非法指令了,又出现新问题了,运行显示一张BMP图片的程序,提示初始化失败,没有设备。Could not initialize SDL - No available video device。又不知道问题出在哪边了,唉

离线

#4 2019-03-11 08:23:16

超级萌新
会员
注册时间: 2018-05-04
累计积分: 193

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

你跑的是 buildroot 生成的程序?具体是哪个程序?

离线

#5 2019-03-31 10:00:07

ArcherEmiya
会员
注册时间: 2019-03-10
累计积分: 6

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

超级萌新 说:

你跑的是 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下

离线

#6 2019-03-31 10:36:33

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,471

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

http://sdl.beuc.net/sdl.wiki/SDL_envvars

#SDL_VIDEODRIVER=fbcon ./test

离线

#7 2019-03-31 13:32:01

ArcherEmiya
会员
注册时间: 2019-03-10
累计积分: 6

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

晕哥 说:

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

离线

#8 2019-03-31 15:23:54

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,471

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

刚刚下载 最新的 SDL 2.0 代码仔细研究, 发现居然没有 fbcon,

后来一番操作之后,  确认只有 1.2 版本才有 fbcon,

你用的应该是 2.0, 下载一个 1.2 版本再试一试.

离线

#9 2019-03-31 16:11:24

ArcherEmiya
会员
注册时间: 2019-03-10
累计积分: 6

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

晕哥 说:

刚刚下载 最新的 SDL 2.0 代码仔细研究, 发现居然没有 fbcon,

后来一番操作之后,  确认只有 1.2 版本才有 fbcon,

你用的应该是 2.0, 下载一个 1.2 版本再试一试.

谢谢晕哥,换了1.2.15的立马就出图像了,之前搞的晕死了,多谢大神

离线

#10 2019-03-31 16:14:22

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,471

Re: licheepi nano 移植SDL2运行程序报Illegal instruction

哈, 解决就好,  日后有空过来持续挖坑.

离线

页脚