Chinaunix首页 | 论坛 | 博客
  • 博客访问: 568691
  • 博文数量: 185
  • 博客积分: 4031
  • 博客等级: 上校
  • 技术积分: 1591
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-27 19:45
文章分类

全部博文(185)

文章存档

2011年(14)

2010年(63)

2009年(108)

我的朋友

分类:

2010-06-09 09:55:44

一、 系统环境

1.交叉编译环境

操作系统:Ubuntu 9.04版

机器硬件: X86 PC机

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

2.嵌入式开发板环境

操作系统:Angstrom 2009.X-stable

机器硬件:beagleboard

应用处理器:OMAP3530

二、 配置交叉编译环境

安装包下载链接:

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

etting-started.pdf下载链接为:

三、 对SDL进行交叉编译

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

解压出来后到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

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

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

写一个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 则有可能是系统问题和交叉编译好的库无关。

阅读(3072) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~