Linux 下源文件安装一共需要三步:
1 ./configure
2 make
3 make install
以源文件安装包freetype-2.4.10.tar.bz2 为例,下载到安装包后首先用tar xjf freetype-2.4.10.tar.bz2 将其解压。
解压后文件夹为freetype-2.4.10,假设其在根目录下,进入此文件夹 cd /freetype-2.4.10。
1 ./configure
configure是一个可执行脚本,用来检查系统是否有编译需要的库以及库的版本是否满足要求。如果要指定安装
目录可以通过prefix指定,一般默认prefix=usr/local,可以在configure文件里查看。如果要设置自己的安装目录
(便于查看都安装了哪些文件),假设安装在/tmp目录下,可以:
./configure --prefix=/tmp
2 make
根据Makefile编译文件
3 make install
把编译好的文件安装到系统中。所谓安装一般也就是一个复制的过程,把产生的头文件、库文件等拷贝到安装
目录里。查看Makefile的install可知,类似于make clean.。
编译矢量字体文件:
gcc -finput-charset=GBK -fexec-charset=UTF-8 -o example1 example1.c -I /usr/local/include/freetype2
-lfreetype -lm
如果你认为所有的源文件安装都是这样的,那就错了,上面的这三步适合linux下使用,在arm上就不行了。
那我如何知道该在什么平台怎么安装呢,这就要查看源文件提供的文档了。如果要知道Linux下怎么安装,查看
vi /freetype-2.4.10/docs/INTSALL.UNIX。
如果安装的文件在要arm上运行,则要查看vi /freetype-2.4.10/docs/INTSALL.CROSS ,CROSS是交叉编译
的意思。根据文档可知arm上安装步骤:
1 ./configure --host=arm-linux
host指定编译好的文件在什么平台下执行,arm上的话指定交叉编译。
2 make
3 make DESTDIR=/tmp install
DESTDIR指定安装路径,也可以在第一步用prefix指定。
当前编译好的文件放在了/tmp目录下,是不能在arm上运行的。要想在arm上运行
编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
编译出来的库文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
库文件复制
把tmp/usr/local/lib/* 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
sudo cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib -d -rf
库文件拷贝到网络文件系统下编译好的应用程序才可以在arm板上运行
cp *so* /nfs_root/lib -d
头文件复制
把tmp/usr/local/include/* 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -rf
这样编译有个头文件错误,因为#include<ftheader.h>包含头文件路径是
freetype/config/ftheader.h
但是theader.h 实际路径是在
freetype2/freetype/config/ftheader.h
所以用要移动一下:
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
mv freetype2/freetype .
第一部分没有移动用 -I /usr/local/include/freetype2 指定头文件路径,这样每次编译都要指定。
编译文件
arm-linux-gcc -finput-charset=GBK -o example1 example1.c -lfreetype -lm
安装不同的gcc版本其实拷贝的路径是不同的,可以在安装路径下通过
find -name include
find -name stdio.h
来判断实际路径,一般是 ./..../include/stdio.h 这种形式的,即include后不再有任何目录。lib路径
find -name lib
参照incllue路径选择是哪个,一般和Include是在同一个目录下。
gcc-3.4.5上的安装路径
头文件
cp /work/freetype-2.4.10/tmp/usr/local/include/* /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include -rf
mv freetype2/freetype ./
库文件
cp /work/freetype-2.4.10/tmp/usr/local/lib/* /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib -rf -d
这样的话在linux系统下就可以使用arm-linux-gcc交叉编译了
在arm板上运行的话,需要把库文件拷贝到网络根文件系统下的lib里面
cp /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/libfreetype.so.6 /nfsroot/lib