2015-09-27 30 views
0

在部署我的OSX應用程序時,.app文件無法找到我編碼的自定義dylib。不過這裏有一點很奇怪:Qt .pro OSX Dylib的文件設置而不是install_name_tool?

  • 它在Qt Creator中工作得很好。
  • 如果我去命令行,cd到我的可執行應用程序(LibraryTester)和dylib文件所在的目錄中,並執行./LibraryTester,它工作得很好。
  • 如果我雙擊可執行文件或.app文件圖標,程序就會崩潰,因爲它無法找到我創建的自定義dylib。

現在,我可以用install_name_tool像這樣輕鬆地解決這個問題:

install_name_tool LibraryTester -change mycustom.1.dylib @loader_path/mycustom.1.dylib 

(事情的關鍵是在@loader_path變量)

...然而,有沒有設置我的Qt 5.5項目的.pro文件,這樣我就不必一直在部署這麼做了。

回答

0

修補程序是在將庫添加到主應用程序項目之前在庫本身上使用install_name_tool。請參閱我錯誤的地方是試圖在應用程序(LibraryTester)而不是dylib上執行此操作。

對於修復,我跑:

install_name_tool -id @loader_path/mycustom.1.dylib mycustom.1.dylib 

上的自定義dylib文件。 @loader_path轉換爲「主應用程序的相同目錄」。所以,在你的.app文件夾中,那將是Contents/MacOS

如果需要,您可以將其與@rpath進行切換,並將其轉換爲Contents/Frameworks

這使您可以在每次編譯主應用程序時即時進行測試。請參閱,有些東西不顯示,直到你雙擊.app文件夾來啓動你的應用程序。當然,你可能能夠運行你的應用程序和命令行及其相關dylib蠻好的,你也許可以從Qt Creator的內部運行它,但也有在那裏,直到你雙擊有些事情可能不再呈現一個問題極少數情況下.app文件夾。

現在,給你一個臨時解決辦法,這樣你就不需要繼續做命令行的東西雙擊.app文件時,使您的dylib工作與你的可執行文件。但是,當你準備爲這個項目投入生產,你應該使用命令macdeployqt

現在,這裏的另一個伎倆你可能不知道在MacOS的Qt/C++。您可以將以下內容添加到.pro文件中,它會自動將您的dylib文件複製到與您的可執行文件(LibraryTester,在我的示例中)相同的目錄中:

mac { 
    Resources.files += mycustom.1.dylib 
# you can put more of these as you need, and it can even copy folders 
# Resources.files += blah blah 
    Resources.path = Contents/MacOS 
    QMAKE_BUNDLE_DATA += Resources 
}