pdf阅读器的跨平台移植。高层可以用qt技术,底层用poppler开源库支持,以及linux操作系统的支持。

移植时用到的环境:

1:linux下的qt4开发环境。

移植用到的知识:

1:熟悉linux下的工程编译方法和环境配置。(对linux比较熟悉)

2:可能会用到cmake生成相应的工程文件。(应掌握cmake生成Makefiel的方法以及cmake的简单应用)

3:交叉编译的方法。

简单的介绍一下交叉编译pdf阅读器的过程以及移植过程。

1:下载poppler的源文件。

2:为检测poppler的完整性和学习简单的编译方法,我们在linux主机上编译一下在fram buffer上运行的程序。

3:用./configure –help命令查看相应的配置命令。根据说明,我们做如下配置:

export POPPLER_QT4_CFLAGS="-I/usr/local/qt-embedded-x86/include/"

export POPPLER_QT4_LIBS="-L/usr/local/qt-embedded-x86/lib -lQtGui -lQtXml"

export POPPLER_QT4_TEST_CFLAGS="-I/usr/local/qt-embedded-x86/include"

export POPPLER_QT4_TEST_LIBS="-L/usr/local/qt-embedded-x86/lib -lQtTest"

export MOCQT4="/usr/local/qt-embedded-x86/bin/moc"

其中,/usr/local/qt-embedded-x86是我在linux主机上的安装目录。你应该更改为你的qt4安装路径。

4:用./configure –enable-poppler-qt4配置并生成Makefile文件。

5:make

6:执行make命令后,会在qt4/demos目录下生成一个名为poppler_qt4viewer的应用,看一下在QVFb里的效果
./poppler_qt4viewer –qws

 

下面主要说明一下pdf浏览器的移植。

先看一下pdf阅读器的底层库的依赖关系。

因此,要交叉编译的库有:

 

 

QT下PDF文件浏览之交叉编译poppler-0.13.0
交叉编译poppler:
交叉编译环境:GCC 4.2.2-eabi
系统  :Fedora 7
目标  :S3C6410
Linux内核 :2.6.24
poppler  :0.13.0
QT环境  :qt-embedded-linux-opensource-src-4.5.3.tar.gz
显示  :CRT
操作步骤如下: *****************************************
第1步:交叉编译glib2.8.0
echo ac_cv_type_long_long=yes>arm-linux.cache
echo glib_cv_stack_grows=no>>arm-linux.cache
echo glib_cv_uscore=no>>arm-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache
CXX=arm-linuxg++ CC=arm-linux-gcc  ./configure --host=arm-linux --build=i386-linux --prefix=/opt --cache-file=arm-linux.cache

交叉编译glib(glib-2.23.2)
cat > config.cache << "EOF"
glib_cv_stack_grows=no
glib_cv_has__inline=yes
glib_cv_working_bcopy=no
glib_cv_uscore=no
ac_cv_func_posix_getpwuid_r=yes
ac_cv_func_posix_getgrgid_r=yes
EOF
CXX=arm-linuxg++ CC=arm-linux-gcc CPPFLAGS="-I/opt/poppLib/include" CFLAGS="-I/opt/poppLib/include" LDFLAGS="-L/opt/poppLib/lib" ./configure --host=arm-linux --build=i386-linux --prefix=/opt/poppLib --cache-file=config.cache
make
make install
*****************************************
*****************************************
第2步: 交叉编译ZLIB 不是必须,为可选项
wget ftp://ftp.archlinux.org/other/zlib/zlib-1.2.3.3.tar.gz
tar xvf zlib-1.2.3.3.tar.gz
cd zlib-1.2.3.3
CC=arm-linux-gcc ./configure --prefix=/opt/poppLib --shared
CC=arm-linux-gcc ./configure --prefix=/opt/poppLib --static
make
make --prefix=/path/to/install/ install
*****************************************
*****************************************
第3步: 交叉编译tslib 如不需要触摸屏,可以不要这不,不要时编译QT的时候加上-no-mouse-tslib
./autogen.sh
echo ac_cv_func_malloc_0_nonnull=yes>arm-linux.cache
./configure --prefix=/opt/tslib --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
make
make install
*****************************************
*****************************************
第4步: 交叉编译png
PKG_CONFIG_PATH=/opt/poppLib/lib/pkgconfig CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/opt/poppLib
make
make install
*****************************************
*****************************************
第5步: 交叉编译jpeg
PKG_CONFIG_PATH=/opt/poppLib/lib/pkgconfig CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/opt/poppLib
make
make install
*****************************************
*****************************************
第6步:交叉编译QTembedded4.5.3  
*****************************************
*****************************************
第7步:交叉编译libxml(libxml2-2.6.32)
PKG_CONFIG_PATH=/opt/poppLib/lib/pkgconfig GNUMAKE=gmake CC=arm-linux-gcc CPPFLAGS="-I/opt/poppLib/include" CFLAGS="-I/opt/poppLib/include" LDFLAGS="-L/opt/poppLib/lib" LIBS="-L/opt/poppLib/lib" ./configure CC=arm-linux-gcc --prefix=/opt/poppLib --host=arm-linux --build=i386-linux --enable-static  --with-gnu-ld
gmake
gmake install
*****************************************
*****************************************
第8步:交叉编译Freetype(freetype-2.3.9)
PKG_CONFIG_PATH=/opt/poppLib/lib/pkgconfig GNUMAKE=gmake ./configure CC=arm-linux-gcc --host=arm-linux --build=i386-linux --target=arm-linux --prefix=/opt/poppLib --enable-static  --with-gnu-ld --without-zlib
gmake
gmake install
*****************************************
*****************************************
第9步:交叉编译fontconfig(fontconfig-2.7.3 )
PKG_CONFIG_PATH=/opt/poppLib/lib/pkgconfig ./configure CC=arm-linux-gcc --host=arm-linux --build=i386-linux --prefix=/opt/poppLib --with-freetype-config=/opt/poppLib/bin/freetype-config --with-arch=arm --enable-static --enable-libxml2 PKG_CONFIG=/opt/poppLib/lib/pkgconfig
make
make install
*****************************************
*****************************************
第10步:交叉编译poppler (poppler-0.12.3 )
PKG_CONFIG_PATH=/opt/poppLib/lib/pkgconfig CC=arm-linux-gcc CPPFLAGS="-I/opt/poppLib/include" CFLAGS="-I/opt/poppLib/include" LDFLAGS="-L/opt/poppLib/lib -lxml2 -lfreetype -Ifontconfig" LIBS="-L/opt/poppLib/lib" ./configure --host=arm-linux --build=i386-linux --prefix=/opt/poppLib  --enable-libjpeg  --enable-libpng  --enable-exceptions
make
make install
*****************************************

 

当然,这只是一个过程参考,具体的移植方案要根据自己的实际情况而定。

在移植过程中,一个比较大的难题是pdf阅读器用到的底层库特别多,而且他们之间的依赖关系特别多。要注意查看readme和用./configure –help命令来获取必要的帮助。

好了,所有的东东都交叉编译好了之后就可以下载到开发板上运行程序了,只不过还要设置一些环境变量。这里就不在一一赘述。

版权声明:本文为博主原创文章,未经博主允许不得转载。