產生 i 檔如下, 命名為 popplerIntf.i
%module popplerIntf然後下swig指令
%{
#include "/usr/include/poppler/PDFDoc.h"
%}
%include "/usr/include/poppler/PDFDoc.h"
swig -c++ -perl5 popplerIntf.i
看起來是成功了。不過問題才剛開始,下一步編譯和連結,必需要確定版本的一致性,因此還是從官網直接抓最新的 source 下來編譯比較保險。可參考http://linux.vbird.org/linux_basic/0520source_code_and_tarball.php
- poppler 似乎同時維護兩種 build systems,分別是 CMake 和 autotools (automaker等) ,參見 http://blogs.gentoo.org/lu_zero/2010/01/24/cmake-vs-autotools-poppler/ 。
- autotools 的使用可參考 http://riverhippo.blogspot.tw/2010/03/gnu-autotools-share-library.html ,其腳本似乎為根目錄下的autogen.sh
- CMake 的組態檔取名為 CmakeLists.txt ,參見 http://zh.wikipedia.org/wiki/CMake
- 根目錄的 INSTALL 檔案說明了一些基本的安裝方式,但沒看到configure檔,顯然我們需要執行 aclocal, autoconf, automake,參見 http://blog.roodo.com/rocksaying/archives/12687975.html
- 但以上功能已由 autorecon 取代,被寫在 autogen.sh 中,因此整個組建流程簡化為:
- 建立並進入子目錄(先確認 <程式庫安裝完整目錄> 已建)
- 執行 ../autogen.sh --prefix=<程式庫安裝完整目錄>
- make
- make install
根據 swig-2.0.8/Doc/Manual/Perl5.html#Perl5_nn9 ,編譯 *_wrap.cxx 檔:
g++ -fPIC -c popplerIntf_wrap.cxx -I/usr/lib/perl/5.14/CORE -I./poppler-0.20.3 -I./poppler-0.20.3/mydist/poppler
g++ -shared popplerIntf_wrap.o -L/home/sig/usr/local/lib -lpoppler-cpp -o popplerIntf.so最後測試一下
perl -MpopplerIntf -e 'print "hi\n"'但問題還是出現了
perl -e 'use popplerIntf;$doc=new popplerIntf::PDFDoc("a.pdf");'訊息如下:
No matching function for overloaded 'new_PDFDoc' at popplerIntf.pm line 62.
根據此文的暗示,可能要自己寫 typemaps...
沒有留言:
張貼留言