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 则有可能是系统问题和交叉编译好的库无关。
本文档详细介绍了在Ubuntu系统上使用arm-2007q3-51-arm-none-linux-gnueabi交叉编译器对SDL进行交叉编译的步骤,包括配置环境、编写armconfigure脚本、编译及测试过程。此外,还提到了在Beagleboard开发板上运行编译结果时可能遇到的问题和解决方法。
SDL交叉编译指南&spm=1001.2101.3001.5002&articleId=5621969&d=1&t=3&u=ca26509d9d974933b545481c90d70ff4)
1108
SDL交叉编译指南&spm=1001.2101.3001.11663&articleId=5621969&d=1&t=3&u=3e8b5f56674f4d9199e2e9c98c1d9776)

被折叠的 条评论
为什么被折叠?



