2017-01-09 175 views
0

我們有一個項目可以動態鏈接幾個dylib。將該版本複製到另一臺Mac時。需要在dylib和可執行文件上運行「otool」,以便在「安裝」過程中修復共享庫路徑。dylib到mac osx上的dylib路徑,如何使mac上的rpath工作?

看起來像OSX有一些奇怪的要求DLL到DLL路徑,使相對路徑不起作用(即:使用rpath)。我的問題在這裏:

  1. 什麼是正常的方式出貨Mac上的軟件?即:在運行.pkg或.dmg安裝程序時,如何確保安裝的dylib能夠以相對路徑相互鏈接? dylib路徑必須用rpath或一些後安裝腳本修復

  2. 如果我們不允許運行post安裝腳本來解決這個問題,還有其他的選擇嗎?

回答

0

相對路徑應該工作得很好。例如,假設一個macOS應用程序包。該應用程序位於Contents/MacOS中,而圖書館居住在Contents/Frameworks。在這種情況下,你應該將應用程序的庫重新鏈接到這樣的東西@executable_path/../Frameworks/library.so。如果您不使用應用程序包,但使用@executable_path的所有文件都在同一個目錄中也應該可以工作。

在這些例子中不需要使用@rpath。您也可以使用它,但它需要應用程序來定義此路徑。如果您想分發圖書館並且人們應該鏈接到您的圖書館,這可能會有所幫助。這樣他們可以在他們的應用程序中給@rpath找到沒有otool的庫。

而且您當然可以在將您的應用程序打包爲.dmg.pkg之前進行這些更改。