码迷,mamicode.com
首页 > 其他好文 > 详细

poppler交叉编译

时间:2015-07-02 15:43:36      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:poppler pdf

项目需要生成和打开pdf文件,编译了pdflib库,可以使用,但是上面有水印。。。如果是商业用途去水印的话需要获得许可。没办法,换呗。

然后就是poppler,这个库的功能很强大,里面更是加入了Qt的支持,刚好适合项目需求。


但是。。。但是前前后后加起来编译poppler半个多月一直失败,网上也没找到解决办法,我真是醉了,这个poppler支持Qt应该是最好的选择方式了,没办法,隔一段时间继续编译。以下是自己编译过程中遇到的问题记录下来,望后来的人少走弯路。


1.支持库的编译

poppler的编译需要很多库,在configuer后会告诉你哪些库已经有了,而哪些还没有支持。这里就不一一记录了,那些库的编译网上很多。其实你编译的过程中出现错误,你先看是什么错误,如果是缺少什么头文件之类的,多半就是它需要的库你没有编译。我的编译一直失败,开始以为是库的支持不够,就将它显示的库全部交叉编译了,最后一直报libpoppler-glib.so wrong format。
这个问题网上很多解释是32位和64位导致文件格式不正确,但是我用32位系统编译怎么会出现格式不对这个问题呢?
后来无意中在http://www.linuxfromscratch.org/blfs/view/svn/general/poppler.html看到poppler编译需要带的库,照它所说

Required

Fontconfig-2.11.1

Recommended

只需要Fontconfig库就可以了,其他的库只是推荐的,然后我就将原本的Cairo和glib库都去掉了,最后的configuer配置如下

PKG_CONFIG_PATH=/opt/poppler/lib/pkgconfig FONTCONFIG_CFLAGS="-I/opt/poppler/include/fontconfig/" FONTCONFIG_LIBS="-L/opt/poppler/lib -lfontconfig"  FREETYPE_CFLAGS="-I/opt/poppler/include/freetype2/" FREETYPE_LIBS="-L/opt/poppler/lib -lfreetype" LIBTIFF_CFLAGS="-I/opt/poppler/include" LIBTIFF_LIBS="-L/opt/poppler/lib -ltiff" LIBOPENJPEG_CFLAGS="-I/opt/poppler/include/openjpeg-1.5" LIBOPENJPEG_LIBS="-L/opt/poppler/lib -lopenjpeg" LIBJPEG_CFLAGS="-I/opt/poppler/include" LIBJPEG_LIBS="-L/opt/poppler/lib -ljpeg" CC=arm-linux-gcc CPPFLAGS="-I/opt/poppler/include" CFLAGS="-I/opt/poppler/include" LDFLAGS="-L/opt/poppler/lib -lz -ljpeg" ./configure --host=arm-linux --prefix=/opt/poppler  --enable-libjpeg  --enable-libpng <span style="color:#ff0000;">--disable-cairo-output</span>


2、Qt库错误

去掉cairo后自然没有glib库的问题了,但是出现了Qt库的问题
这个问题网上绝大部分给出的答案是说有多个qmake,即qmake的路劲不对,所以我在configuer中又加上了Qt的路劲和库

PKG_CONFIG_PATH=/opt/poppler/lib/pkgconfig FONTCONFIG_CFLAGS="-I/opt/poppler/include/fontconfig/" FONTCONFIG_LIBS="-L/opt/poppler/lib -lfontconfig"  FREETYPE_CFLAGS="-I/opt/poppler/include/freetype2/" FREETYPE_LIBS="-L/opt/poppler/lib -lfreetype" LIBTIFF_CFLAGS="-I/opt/poppler/include" LIBTIFF_LIBS="-L/opt/poppler/lib -ltiff" LIBOPENJPEG_CFLAGS="-I/opt/poppler/include/openjpeg-1.5" LIBOPENJPEG_LIBS="-L/opt/poppler/lib -lopenjpeg" LIBJPEG_CFLAGS="-I/opt/poppler/include" LIBJPEG_LIBS="-L/opt/poppler/lib -ljpeg" CC=arm-linux-gcc CPPFLAGS="-I/opt/poppler/include" CFLAGS="-I/opt/poppler/include" LDFLAGS="-L/opt/poppler/lib -lz -ljpeg" <span style="color:#ff0000;">POPPLER_QT4_CFLAGS="-I/opt/qt-4.8.5-embedded/include" POPPLER_QT4_LIBS="-L/opt/qt-4.8.5-embedded/lib -lQtGui -lQtCore -lQtXml -lQtScript -lQtNetwork"</span>  ./configure --host=arm-linux --prefix=/opt/poppler  --enable-libjpeg  --enable-libpng --disable-cairo-output

我有尝试去掉qt4的支持,编译成功了。算是个好消息了。如果不需要qt的支持应该已经可以使用了

3、tslib库问题

/opt/qt-4.8.5-embedded/lib/libQtGui.so: undefined reference to `ts_read_raw'
/opt/qt-4.8.5-embedded/lib/libQtGui.so: undefined reference to `ts_open'
/opt/qt-4.8.5-embedded/lib/libQtGui.so: undefined reference to `ts_fd'
/opt/qt-4.8.5-embedded/lib/libQtGui.so: undefined reference to `ts_config'
/opt/qt-4.8.5-embedded/lib/libQtGui.so: undefined reference to `ts_close'
/opt/qt-4.8.5-embedded/lib/libQtGui.so: undefined reference to `ts_read'
很多人都说这个问题是因为没有修改arm-linux-g++/qmake.conf文件,即没有加入
# modifications to g++.conf
QMAKE_CC                = arm-linux-gcc -lts
QMAKE_CXX               = arm-linux-g++ -lts
QMAKE_LINK              = arm-linux-g++ -lts
QMAKE_LINK_SHLIB        = arm-linux-g++ -lts
但是这样说是因为你在交叉编译Qt源码的时候没有加入tslib库的支持,而我在编译qt库的时候已经加入了tslib的支持,所以qmake.conf文件中已经有ts的支持了,但是还是出现找不到tslib函数的错误。按照网上给出的建议在qmake.conf 中添加 QMAKE_LFLAGS += -Wl,-rpath-link=/opt/tslib-1.4/lib 重新编译qtgui库,问题还在。发现出错的是qt4目录下的demo和tests文件夹的编译,果断在Makefile中去掉了这两个文件夹的编译。
    哇塞终于成功的生成了 libpoppler.so、libpoppler-cpp.so、libpoppler-qt4.so。好了接下来就是按照官网给的例子试试库能不能用。
给出官网的链接:http://people.freedesktop.org/~aacid/docs/qt4/
    

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

poppler交叉编译

标签:poppler pdf

原文地址:http://blog.csdn.net/sddsighhz/article/details/46519437

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!