2010-05-11 68 views
9

我有一個應用程序項目,取決於我自己創建的幾個共享庫。據Qt的4.6文件「在Mac OSX上部署應用程序」:macdeployqt和第三方庫

注意:如果你想有一個第三方庫 要包含在你的應用程序 包,那麼你就必須添加一個excplicit LIB入口該庫到您的 應用程序的.pro文件。否則, macdeployqt工具不會將 第三方.dylib複製到包中。

我已經將lib條目添加到我的應用程序的.pro文件中,但是當我執行macdeployqt時,我寫入的庫不會被複制到該包中。我在.pro文件如下:

LIBS += -L../Libraries -lMyLib 

一切都建立好了,它只是當我嘗試從我遇到的問題,即捆綁運行「未找到圖像」的錯誤。

是否有macdeployqt中的錯誤,或者我還需要更多的東西到我的.pro文件?

回答

1

您是否檢查了.app軟件包以查看庫文件是否真的不是

如果是這樣的話,我會假設macdeployqt中確實存在一個錯誤,或者它根本找不到您要鏈接的庫。就我個人而言,我從來沒有見過macdeployqt實際上將任何需要的第三方庫複製到軟件包中。

有趣的部分是,macdeployqt永遠不會直接與.pro文件一起工作。它只是爲生產的應用程序包做一些事情。和快速瀏覽到文檔此Qt 4.7 documentation page明顯後,證明我的權利:

注意:如果你想有一個第三方庫包含在您的應用程序包,則必須在庫手動複製到捆綁,後該捆綁被創建。

我假設4.6文檔中有一個錯誤。對我來說,macdeployqt 從來沒有將任何庫文件放在我的包中(當然除了Qt *之外)。

我在過去花了很多時間處理這些東西,最後編寫了一個簡單的小腳本(Python),將所有東西打包到我的包中,根據需要更改庫名,並將所有內容放入.dmg具有自動命名的文件。

可能不是你想聽到的,但它的工作原理。 ;)

14

badcat是正確的,Qt 4.6文檔有一個可以用macdeployqt工具的可能性很高的視圖。

根據我的經驗,由macdeployqt做的唯一的事情是:

  1. Qt庫到foo的你的應用程序包複製。應用程序/目錄/框架/目錄
  2. 調整一個二進制文件的鏈接庫,即foo.app/Contents/MacOS/foo(即使您在Info.plist中提及另一個二進制文件,也必須具有與應用程序包相同的名稱)

因此,對於每一個其他二進制和庫要在您的應用程序捆綁部署,必須做到以下幾點:

  1. 運行macdeployqt享受它有用,但有氣無力地不足的好處

    macdeployqt <path_to_your_nascent_app_bundle>/foo.app

  2. 安裝您額外的庫手動

    cp <original_library_path> foo.app/Contents/Frameworks/<lib_name>

  3. 找出庫每個二進制鏈接。

    otool -L <binary_file_name>

  4. 改變內部libary路徑在二進制文件

    install_name_tool -change <original_library_path> @executable_path/../Frameworks/<lib_name> <binary_file_name>

我寫的,它可以自動這些步驟爲我的應用perl腳本,但它是一個有點太具體我在這裏發佈的特定環境。

+0

+1「同名的應用程序包」的一部分。我的.app名稱中包含內部版本號,但不包含二進制文件。這似乎解決了我的一個問題。謝謝。 – kolenda 2015-04-23 12:06:30

+0

你macdeployqt再度缺少的庫複製到應用程序和install_name_toll那些缺少庫運行 – MistyD 2016-02-03 02:00:08

+0

@MistyD號macdeployqt,它至少是如何工作的,當我寫這個答案運行,無助於那些缺少的庫。這就是您手動運行install_name_tool的原因。 – 2016-02-03 15:13:46

3

你並不需要採取有關第三方庫的手動部署護理。我上傳了一個補丁的Qt,使得它可以指定其他庫搜索路徑,從而使macdeployqt工具找到第三方的依賴關係: https://codereview.qt-project.org/#change,47906

這一項之後會有另外承諾,將增加對第三支撐黨圖書館的部署。

+0

這對macdeployqt來說是一個很好的補充。手動部署第三方庫/框架是一件痛苦的事情。 – 2013-04-10 19:32:51

+0

我下載了這個並試圖構建它('qttools.pro',用git中的qttools文件夾替換我的Qt 5.0.2中的qttools文件夾),但是獲得了有關qtNomakeTools的錯誤和(在我評論完之後)'Project has no頂級.qmake.conf文件'和'未指定模塊版本'。你能幫我修補補丁嗎?我試圖在Mac上進行部署。我試過布魯斯的方式,但它導致了路徑中的大量路徑。 – 2013-05-23 03:07:49

0

https://github.com/auriamg/macdylibbundler

dylibbundler是一個小的命令行程序,旨在使捆綁.dylibs儘可能容易。它會自動確定您的程序需要哪些dylib,將這些庫複製到應用程序包中,並修復它們和可執行文件以準備分發...所有這些都通過一個命令在終端上進行!如果您的程序也使用具有依賴關係的插件,它也可以工作。