2013-01-21 97 views
0

我想從最新的源碼編譯wkhtmltopdf。我在Ubuntu 12.10 x64服​​務器版上。Ubuntu上的wkhtmltopdf編譯

我使用了herehere的說明。

對於作者提到的wkhtmltopdf-qt編譯,新的Git回購是在4.8.2分支上的gitorious.org/~antialize/qt/antializes-qt.git。所以,這也是我用過的。

一切都很順利。 (qt和wkhtmltopdf)的編譯成功完成。但我只能以root身份使用wkhtmltopdf(使用sudo)。當我像其他用戶一樣運行它時,出現以下錯誤。

error while loading shared libraries: libQtWebKit.so.4: cannot open shared object file: No such file or directory. 

我已經完成了所有的編譯作爲root用戶,其中root用戶的主目錄(/ root)內的文件。我猜想wkhtmltopdf程序需要讀取wkqt目錄,編譯的qt所在的目錄(和libQtWebKit.so.4文件)。該目錄也位於根用戶的主目錄中,因此阻止其他用戶運行wkhtmltopdf

所以,我決定再次從頭開始。這一次,我把所有的源文件(wkhtmltopdf-qtwkhtmltopdf)放在/usr/wkhtmltopdf。但是在編譯qt的過程中,編譯器嘗試訪問存在qt源的前一個(舊)位置(/root/wkhtmltopdf-qt)處的qmake時出現錯誤。下面

錯誤:

ln -s libQtDeclarative.so.4.8.2 libQtDeclarative.so 
ln -s libQtDeclarative.so.4.8.2 libQtDeclarative.so.4 
ln -s libQtDeclarative.so.4.8.2 libQtDeclarative.so.4.8 
rm -f ../../lib/libQtDeclarative.so.4.8.2 
rm -f ../../lib/libQtDeclarative.so 
rm -f ../../lib/libQtDeclarative.so.4 
rm -f ../../lib/libQtDeclarative.so.4.8 
mv -f libQtDeclarative.so.4.8.2 libQtDeclarative.so libQtDeclarative.so.4 libQtDeclarative.so.4.8 ../../lib/ 
make[1]: Leaving directory `/usr/wkhtmltopdf/wkhtmltopdf-qt/src/declarative' 
cd src/3rdparty/webkit/Source/ && make -f Makefile.WebKit 
make[1]: Entering directory `/usr/wkhtmltopdf/wkhtmltopdf-qt/src/3rdparty/webkit/Source' 
/root/wkhtmltopdf-qt/bin/qmake -spec ../../../../mkspecs/linux-g++-64 -o Makefile.WebKit WebKit.pro 
make[1]: /root/wkhtmltopdf-qt/bin/qmake: Command not found 
make[1]: *** [Makefile.WebKit] Error 127 
make[1]: Leaving directory `/usr/wkhtmltopdf/wkhtmltopdf-qt/src/3rdparty/webkit/Source' 
make: *** [sub-webkit-make_default-ordered] Error 2 

我不明白這是怎麼可能當我開始絕對新鮮的源代碼。

有什麼方法可以完全刪除(卸載)以前安裝的wkhtmltopdf-qtwkhtmltopdf

我將不勝感激。謝謝。

回答

0

好的,我想通了。

顯然,源代碼並不像我想的那麼新鮮。

我正在清理QT源目錄的Git工作副本中未跟蹤和修改的文件。正在運行git status未顯示修改的文件。但我錯過的是,有很多git-ignored文件夾和文件,它們仍然有關於以前編譯的信息。這些文件和文件夾沒有顯示在git status中。

因此,我暫時將.gitignore文件移出倉庫並運行git clean -fd。這清理了所有不必要的文件。然後我將.gitignore文件移回。爲了安全起見,我還運行了git checkout -- .以從HEAD獲取所有文件的最新版本。

之後編譯工作。