交叉编译 linux库,linux一些库文件的交叉编译

参考出处:一步步教你交叉编译嵌入式linux GUI-directfb+gtk

一、注意点:

1、在./configure的--host的选项可以为arm-linux或arm-none-linux-gnueabi(编译工具cross-4.3.2,也是本次用的编译工具,在安装目录下的/bin文件夹里可以用ls -l看到编译工具除了arm-linux-gcc和arm-none-linux-gnueabi-gcc,arm-linux-g++和arm-none-linux-gnueabi-g++不同外,其余的都相同,都是连接),他们两个是不同的,前者貌似采用eabi,后者采用oabi(新手一个,猜测的).这关系到使用这些库的程序在板上的无法运行(出现得最多的是在板运行程序时会出现:illegal

instruction),如果内核打开对EABI的支持,那么最好使用EABI进行编译(我的板上linux内核版本是2.6.29,已经打开了对EABI的支持,且qtopia2.20的文件系统也支持EABI),所以采用arm-linux进行编译。

具体可以参考:

arm Linux 2.6高版本中的系统调用方式

GNU arm 汇编求助

2、如果采用一种编译器进行编译,那么被依赖的那个库也一样要用同种编译器进行编译。

二、设置环境变量(本人用的是ubuntu9.04)

export SOURCE_PATH=/home/evix/src

export PREFIX=/opt/arm

export LDFLAGS=-L$PREFIX/lib

export CFLAGS="-g -I$PREFIX/include"

export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig

三、编译库文件(#在最前前面的表示注释)

1.交叉编译tslib, 依赖的库: 无

=========开始交叉编译tslib=========

安装编译过程需用到的程序

apt-get install autoconf(或autoconf2.13)

apt-get install automake

apt-get install libtool

cd ${BUILDDIR}

tar xzvf ${SOURCE_PATH}/tslib-1.4.tar.gz

cd tslib

source autogen.sh

./configure --host=arm-linux --prefix=$PREFIX ac_cv_func_malloc_0_nonnull=yes

make

make install

2.交叉编译glib, 依赖的库: 无

=========开始交叉编译glib=========

cd ${BUILDDIR}

tar xzvf ${SOURCE_PATH}/glib-2.22.2.tar.gz

cd glib-2.22.2

echo "glib_cv_stack_grows=no" > arm-linux.cache

echo "glib_cv_has__inline=yes" >> arm-linux.cache

echo "glib_cv_working_bcopy=no" >> arm-linux.cache

echo "glib_cv_uscore=no" >> arm-linux.cache

echo "ac_cv_func_posix_getpwuid_r=yes" >> arm-linux.cache

echo "ac_cv_func_posix_getgrgid_r=yes" >> arm-linux.cache

./configure --host=arm-linux --prefix=$PREFIX --cache-file=arm-linux.cache

make

make install

3.交叉编译jpeg, 依赖的库: 无

=========开始交叉编译jpeg=========

cd ${BUILDDIR}

tar -zxvf ${SOURCE_PATH}/jpegsrc.v6b.tar.gz

cd jpeg-6b

#注意这里的./configure是没有--host=arm-linux,所以以下要用sed命令替换makefile中x86的配置

./configure -prefix=$PREFIX --enable-shared --enable-static

sed -i -e 's/CC= gcc/CC= arm-linux-gcc/g' Makefile

sed -i -e 's/AR= ar rc/AR= arm-linux-ar rc/g' Makefile

sed -i -e 's/AR2= ranlib/AR2= arm-linux-ranlib/g' Makefile

如果单单编译jpeg这个库,必须在所指安装目录下建立好bin,include,lib这三个文件夹

#mkdir $PREFIX/include

#mkdir $PREFIX/bin

#mkdir $PREFIX/lib

mkdir -p $PREFIX/man/man1

make

make install

4.交叉编译zlib, 依赖的库: 无

=========开始交叉编译zlib=========

cd ${BUILDDIR}

tar xzvf ${SOURCE_PATH}/zlib-1.2.3.tar.gz

cd zlib-1.2.3

CC=arm-linux-gcc AR="arm-linux-ar rc" RANLIB=arm-linux-ranlib ./configure --prefix=$PREFIX --shared

make

make install

5.交叉编译libpng, 依赖的库: zlib

=========开始交叉编译libpng=========

cd ${BUILDDIR}

tar xzvf ${SOURCE_PATH}/libpng-1.2.40.tar.tar

cd libpng-1.2.40

LDFLAGS="-L$PREFIX/lib" CFLAGS="-g -I$PREFIX/include" ./configure --host=arm-linux --prefix=$PREFIX

make

make install

6.交叉编译freetype, 依赖的库: 无

=========开始交叉编译freetype=========

cd ${BUILDDIR}

tar xjf ${SOURCE_PATH}/freetype-2.3.5.tar.gz

cd freetype-2.3.5

./configure --host=arm-linux --prefix=$PREFIX

make

make install

7.交叉编译libxml, 依赖的库: 无

=========开始交叉编译libxml=========

cd ${BUILDDIR}

tar xzf ${SOURCE_PATH}/libxml2-2.7.4.tar.gz

cd libxml2-2.7.4

./configure --host=arm-linux --prefix=$PREFIX

make

make install

8.交叉编译fontconfig, 依赖的库: freetype, libxml2

=========开始交叉编译fontconfig=========

cd ${BUILDDIR}

tar xzf ${SOURCE_PATH}/fontconfig-2.7.2.tar.gz

cd fontconfig-2.7.2

LIBXML2_LIBS="-L$PREFIX/lib -lxml2" LIBXML2_CFLAGS=-I$PREFIX/include/libxml2 ./configure --host=arm-linux --prefix=$PREFIX --with-freetype-config=$PREFIX/bin/freetype-config --with-arch=arm

make

make install

9.交叉编译lcms, 依赖的库:

=========开始交叉编译lcms=========

tar zxvf lcms-1.18a.tar.gz

cd lcms-1.18

#在./congfigure前要把congfigure文件中的PACKAGE_STRING='lcms 1.18'(利用查找)修改为中间不能有空格的,如PACKAGE_STRING='lcms_1.18',否则用-host=arm-linux,在make的时候会报错(arm-none-linux-gnueabi-gcc: 1.18": No such file or directory)

./configure -host=arm-linux -prefix=$PREFIX

make

make install

# 10.交叉编译poppler, 依赖的库: freetype, fontconfig, libxml2, libcms, QtE库(QtE库的编译网上应该很多)

echo "=========开始交叉编译poppler========="

tar zxvf poppler-0.11.3.tar.gz

cd poppler-0.11.3

export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.2-arm

指定freetype的include文件时,需指定PKG_CONFIG_PATH,详情可以看poppler的configure

CFLAGS="-g -I/opt/arm/include" PKG_CONFIG_PATH=/opt/arm/lib/pkgconfig LDFLAGS="-L/opt/arm/lib" FREETYPE_CFLAGS="-I$PREFIX/include/freetype2" FREETYPE_LIBS="-L$PREFIX/lib -lfreetype" FONTCONFIG_CFLAGS="-I$PREFIX/include" FONTCONFIG_LIBS="-L$PREFIX/lib -lfontconfig"

POPPLER_QT4_CFLAGS="-DQT_SHARED -I$QTEDIR/include" POPPLER_QT4_LIBS="-L$QTEDIR/lib -lQtGui -lQtXml -lQtCore" POPPLER_QT4_TEST_CFLAGS="-DQT_SHARED -I$QTEDIR/include" POPPLER_QT4_TEST_LIBS="-L$QTEDIR/lib -lQtTest -lQtCore" ./configure --host=arm-linux --prefix=$PREFIX

make

make install

本人是新手一个,本来想是想编译一个poppler库出来,没想到它所依赖的库文件有如此多,所以在编译的时候花费了很长一段时间,其中包括到网上找资料,请教他人(这里感谢“魔力小子”这位热心的朋友),希望写这篇东西能帮一些刚上手的朋友少走点弯路。~_~,第一篇博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值