(zz)SDL交叉编译指南

本文档详细介绍了在Ubuntu系统上使用arm-2007q3-51-arm-none-linux-gnueabi交叉编译器对SDL进行交叉编译的步骤,包括配置环境、编写armconfigure脚本、编译及测试过程。此外,还提到了在Beagleboard开发板上运行编译结果时可能遇到的问题和解决方法。
AI助手已提取文章相关产品:

 

12月9日

SDL交叉编译指南

一、 系统环境

1.交叉编译环境

操作系统:Ubuntu 9.04版

机器硬件: X86 PC机

交叉编译器:arm-2007q3-51-arm-none-linux-gnueabi

2.嵌入式开发板环境

操作系统:Angstrom 2009.X-stable

机器硬件:beagleboard

应用处理器:OMAP3530

二、 配置交叉编译环境

安装包下载链接:

http://www.codesourcery.com/downloads/public/gnu_toolchain/arm-none-linux-gnueabi

参考文档《Sourcery G++ Lite安装使用.rtf》或者《getting-started.pdf》进行编译环境的配置。

etting-started.pdf下载链接为:

https://support.codesourcery.com/GNUToolchain/doc5697/getting-started.pdf

三、 对SDL进行交叉编译

从sdl官方网站上下载sdl源代码,下载链接

http://www.libsdl.org/download-1.2.php

解压出来后到SDL目录

在该目录下创建一个脚本文件armconfigue(该文件名可以自己取)

文件内容为:

!/bin/sh

export PATH=$PATH:/root/CodeSourcery/Sourcery_G++_Lite/bin

export INSTALL_PATH=/root/CodeSourcery/Sourcery_G++_Lite/arm-none-linux-gnueabi/libc/usr

export USER_HOST=arm-none-linux-gnueabi

export USER_CROSS_COMPILE=arm-none-linux-gnueabi-

export USER_CFLAGS="-I${INSTALL_PATH}/include/"

export USER_LDFLAGS="-L${INSTALL_PATH}/lib/"

export USER_CC="${USER_CROSS_COMPILE}gcc"

export USER_CXX="${USER_CROSS_COMPILE}g++"

export USER_AR="${USER_CROSS_COMPILE}ar"

PRIV_FLAGS="-DDISABLE_MOUSE -D__ARM__"

#PRIV_FLAGS="-D__ARM__ -DFBCON_DEBUG"

./configure /

--prefix=${INSTALL_PATH} /

-host=${USER_HOST} /

--enable-static /

--disable-shared /

--disable-joystick /

--disable-cdrom /

--disable-esd /

--disable-nasm /

--enable-video-x11 /

-enable-video-fbcon /

--enable-video-opengl /

--enable-osmesa-shared /

--disable-arts /

--disable-alsa /

--without-x /

-enable-debug /

--enable-loadso /

--disable-video-directfb /

CC=${USER_CC} /

CXX=${USER_CXX} /

CFLAGS=" ${USER_CFLAGS} ${PRIV_FLAGS} -DNO_SIGNAL_H " /

LDFLAGS=${USER_LDFLAGS}

ake

make install

执行该脚本root@minge:/home/minge/svn/NGDev/SDL# ./armconfigure

执行完成后生成一个build目录

root@minge:/home/minge/svn/NGDev/SDL# ls build/.libs/*SDL*

build/.libs/libSDL.a build/.libs/libSDL.la build/.libs/libSDL.lai

这时已经生成静态库build/.libs/libSDL.a

四、 对编译好的库进行测试

从网上下载一个测试代码:

http://lazyfoo.net/downloads/index.php?file=SDLTut_lesson01

写一个Makefile文件

GCC = arm-none-linux-gnueabi-gcc

CPP = g++

RM = rm -fr

CFLAGS = -g -lpthread

CPPFLAGS = $(CFLAGS)

LIBS = /home/minge/svn/NGDev/SDL/build/.libs/libSDL.a

OBJS = lesson01.o

SRCS = lesson01.c

CARGS = -c -g

APPS = lesson001

all: $(APPS)

$(APPS): $(OBJS)

$(GCC) $(CFLAGS) $^ $(LIBS) -o $@

lesson01.o:lesson01.c

$(GCC) $(CARGS) $^

clean:

$(RM) $(APPS) $(OBJS) *.orig

Make该文件,进行编译(sdl的头文件必须在SDL 目录下)

root@minge:~/test# make -f Makefile

root@minge:~/test# ls

SDL hello.bmp lesson001 lesson01.c lesson01.o Makefile

注意事项:

如果编译时出现类似于undefined reference to `DirectFBCreate有关于directfb的错误 则有可能是因为configure时没有加入--disable-video-directfb

如果出现的错误为:

root/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.1/../../../../arm-none-linux-gnueabi/bin/ld: /home/minge/svn/NGDev/SDL/build/.libs/libSDL.a(SDL.o): Relocations in generic ELF (EM: 3)

/home/minge/svn/NGDev/SDL/build/.libs/libSDL.a: could not read symbols: File in wrong format

collect2: ld returned 1 exit status

make: *** [lesson001] Error 1

则有可能是没有用交叉编译器编译,而用的是普通gcc编译器编译的。

五、 嵌入式开发板上运行

编译好的程序和静态库考到开发板上面

root@beagleboard:/home/minge# ls

Makefile hello.bmp lesson01.c libSDL.a

Makefilex86 lesson001 lesson01.o

root@beagleboard:/home/minge# ./lesson001

注意事项:

如果程序出现段错误,可以用DL_GetError获取错误信息

如果错误信息为No available video device 则有可能是没有enable fbcon

如果错误信息为No video mode large enough for 则有可能是系统问题和交叉编译好的库无关。

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值