2014-09-24 63 views
0

我想在Linux和Mac上打包/部署一個Qt應用程序。 (Qt 4.8)。由於許可類型,我必須使用共享庫。在Mac OSX和Linux上部署Qt應用程序,我需要在包中包含哪些庫?

在Linux中

,下面的Qt documentation,我跑ldd myprogram,並得到一個輸出像

linux-gate.so.1 => (0xb76fa000) 
libOneOfMyLibs.so.1 => /usr/local/lib/libOneOfMyLibs.so.1 (0xb76d7000) 
libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0xb5440000) 
libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0xb501a000) 
....... 
libgpg-error.so.0 => /lib/i386-linux-gnu/libgpg-error.so.0 (0xb4316000) 
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb4fba000) 
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb4f9c000) 
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb4df0000) 
libcups.so.2 => /usr/lib/i386-linux-gnu/libcups.so.2 (0xb4d91000) 
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb4cbb000) 
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb4cb6000) 
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb4c99000) 
libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb4c56000) 
libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0xb4c3c000) 
libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb4b41000) 
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb4b14000) 
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb4a67000) 
libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb4a16000) 
..... 

非常多的依賴關係,只有他們中的一些的Qt庫。但之後他們說,既然不能確定安裝的程序將運行什麼,我應該打包所有的庫依賴關係。

還有很多!我絕對需要一些像sqlite3一樣的。我還讀到libfreetype和libfontconfig是必需的,因爲它們可能在新系統上不同。

我怎麼知道哪些庫是必需的?我應該包裝所有這些嗎?

mac directions只顯示我必須添加Qt庫。即便如此,在Mac上列出的依賴,我得到

myprogram.app/Contents/MacOS/myprogram: 
    libOneOfMyLibs.1.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /usr/local/lib/libsqlite3.0.dylib (compatibility version 9.0.0, current version 9.6.0) 
    /usr/lib/libcups.2.dylib (compatibility version 2.0.0, current version 2.8.0) 
    QtGui.framework/Versions/4/QtGui (compatibility version 4.8.0, current version 4.8.6) 
    QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.6) 
    .... 
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) 
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 832.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11) 

在mac上 - 做我需要補充的libstdC++ 6.dylib和休息。?

從Qt的documentation

「應用程序包中包含的應用程序可執行文件以及 相關性,如您可能需要Qt庫,插件,翻譯和其他 資源,如Qt的第三方庫通常不是安裝在系統上的 ;每個應用程序都提供它自己的副本。「

總結我的問題:

如果我不想做出我想要部署,做我需要添加所有的系統庫的依賴,或僅Qt庫系統做任何假設,或者......我必須將這些庫添加到我的包中?

+0

你可以看到這篇文章的Linux部署︰http://stackoverflow.com/questions/25967340/how-to-create-a-qt-application-for-all-unix-versions/25967872#25967872 – Nejat 2014-09-25 04:06:18

+0

謝謝 - 它仍然沒有說明應該或不應該要求的依賴庫。 – Thalia 2014-09-25 14:28:44

回答

0

您的程序鏈接到的所有庫需要以某種方式。這就是許多Linux有自己的打包系統的原因:每個系統上都有libs,因此你不必打包這些文件,而且他們知道如何管理依賴關係,因此你只需提供一個deps列表和你的應用。

關於Linux,這意味着:要爲特定發行版創建一個包,請使用發行版的包裝系統。 (他們中的大多數非常大的幫助,所以你不必擺弄什麼需要的,什麼不是。)

包裝爲「任何Linux」將意味着:

  • 包括所有依賴
  • 寫必須不覆蓋現有文件

最簡單的方式安裝程序爲「所有」分發提供了一個包:使用衆所周知的構建系統(如自動工具或CMake的)分發源,告訴外部庫是什麼用戶用在你的代碼中,所以他/ sh e可以在嘗試構建應用程序之前安裝這些程序。

對不起,我不知道MacOS的要求。我的猜測是:你可以簡單地使用一些包裝系統。

+0

我仍然不知道是否應該添加ldd列出的所有庫 - 所有這些帖子和教程似乎都忽略了除Qt庫之外的任何庫。例如,libgcc - 一個非常基礎的構建庫,我相信每個必須這樣做的人都列出了它的依賴關係 - 我可以確定任何系統都有它,並且有正確的版本嗎? – Thalia 2014-09-25 14:32:14

+0

我可以再次強調一下(關於linux):使用您想要在其上部署應用程序的分發包的打包系統。所有複雜的發行版都有如何使用他們的包裝,雖然f.e.在gentoo上,這有點難以進入。 另外這篇文章給出了必要的所有提示:http://stackoverflow.com/questions/25967340/how-to-create-a-qt-application-for-all-unix-versions/25967872#25967872在bare Linux的從劃傷。 – St0fF 2014-09-26 10:44:19

+0

似乎我正在推翻它,並且除了任何我不指望系統擁有或者可能有錯誤版本(如sqlite3)之外,應該不包括任何列出的依賴項, – Thalia 2014-10-28 22:38:40

相關問題