全部博文(185)
分类:
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目录
在该目录下创建一个脚本文件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 则有可能是系统问题和交叉编译好的库无关。