ubuntu下怎么打包寫好的Qt程序?
你可以參考SQLiteStudio這個Qt寫的跨平臺SQLite管理工具,它自己打包了依賴的Qt庫,可以做到解壓即用,兼容不同Linux發行版.道理其實跟Windows版Qt程序自帶Qt庫差不多.
編譯前給連接器傳一個參數:
說明:
-Wl 表示告訴編譯器將后面的參數傳遞給鏈接器.
rpath是gcc的一個參數,當程序被加載時,會搜尋rpath目錄,尋找共享庫.
rpath添加的目錄信息保存在可執行文件中.
$ORIGIN表示可執行文件所在的目錄.
也就是運行時程序會先去自己所在的目錄的lib里去加載依賴庫,沒有的話再去系統庫里找.
如果你的程序在編譯時沒有傳遞rpath參數,那你也可以用patchelf來修改你程序的rpath:
注意:patchelf修改文件后再strip會導致文件損壞.
所以應該先用strip刪除符號表縮小二進制文件,然后再用patchelf設置rpath.
題外話,Android上既沒有glibc庫,也沒有庫鏈接器ld-linux.so.3.
如果你要把Debian ARM(如樹莓派Raspbian)上的軟件放到Android上跑,你一樣可以打包程序依賴的共享庫,讓程序也能跑在Android上,比如PHP:
也就是你把庫鏈接器ld-linux-armhf.so.3和PHP依賴的庫都放到/data/local/tmp/web/lib里,然后設置個別名,就能在Android的adb shell里運行樹莓派的PHP了.
當然,你也可以用patchelf設置PHP的interpreter和rpath,效果差不多: