Pdf瀏覽器的移植

來源:互聯網
上載者:User

 

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命令來擷取必要的協助。

好了,所有的東東都交叉編譯好了之後就可以下載到開發板上運行程式了,只不過還要設定一些環境變數。這裡就不在一一贅述。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.