因为工作中需要用到arm交叉编译,飞凌提供的是在Ubuntu12x86里用,但我不喜欢Ubuntu,太耗资源,所以打算在CentOS里使用,为了在Linux里也能调试程序(因为arm还是32位的),所以我安装CentOS 6 x86系统,还能更节省内存。
首先在vmware里安装CentOS后安装好界面,安装vmware-tools。
安装gcc和make:yum install -y gcc gcc-c++ make
然后解压缩freescale.tar.gz到/opt/freescale中。
因为项目里用到libxml2,需要交叉编译该库:
下载解压后进入到Libxml2目录中,执行命令:
./configure --prefix=/opt/freescale/libxml2 --host=arm-fsl-linux-gnueabi CC=/opt/freescale/bin/arm-fsl-linux-gnueabi-gcc CXX=/opt/freescale/bin/arm-fsl-linux-gnueabi-g++
发现错误:
/bin/rm: cannot remove `libtoolT’: No such file or directory
百度后发现要注释掉:#
R
M
"
RM "
RM"cfgfile"(加#)。
再次运行后就可以make && make install了。
编译程序时的Makefile样例如下:
CC = arm-linux-g++
LD = arm-linux-g++
CFLAGS := -W -c -fPIC -g -Wall
SRC = .
INC = .
INCLUDES = -I/opt/freescale/libxml2/include/libxml2
LDFLAGS = -L/opt/freescale/libxml2/lib
LIBS = -lxml2
all: libxxx.so test
objects = xxx.o xxxxx.o
# xml2库在设备中使用的版本为2.7.8,下载网址: http://xmlsoft.org/sources/
libxxx.so: $(objects)
$(LD) $(LDFLAGS) $(LIBS) -fPIC -shared -o $@ $^
%.o: %.cpp
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^
test: test.o
$(LD) -L./ -lxxx -lxml2 -Wl,-rpath=./ -Wl,-rpath=../xxx -o $@ $^
.PHONY : clean
clean:
rm -f *.o
rm -f *.so
rm -f test