我有一個應用程序,我想要捆綁一個特定的dylib。 我使用「dylibbundler」將dylib和依賴關係複製到可執行文件夾。以下是我正在使用的命令:使用單聲道可執行文件打包.dylib文件
dylibbundler -od -b -x /opt/local/lib/libil.dylib -d ./libs/ -p @executable_path/libs/
dylibbundler與可執行文件位於同一目錄中。該工具在庫及其所有依賴項上遞歸運行「install_name_tool」(並將它們複製到指定的目錄中)。在./libs/libil.1.dylib返回運行otool -L:
@executable_path/libs/libIL.1.dylib (compatibility version 3.0.0, current version 3.0.0)
@executable_path/libs/libtiff.5.dylib (compatibility version 8.0.0, current version 8.0.0)
@executable_path/libs/liblzma.5.dylib (compatibility version 6.0.0, current version 6.4.0)
@executable_path/libs/libpng15.15.dylib (compatibility version 30.0.0, current version 30.0.0)
@executable_path/libs/libmng.1.dylib (compatibility version 2.0.0, current version 2.0.0)
@executable_path/libs/liblcms.1.dylib (compatibility version 2.0.0, current version 2.19.0)
@executable_path/libs/libjasper.1.dylib (compatibility version 2.0.0, current version 2.0.0)
@executable_path/libs/libjpeg.9.dylib (compatibility version 10.0.0, current version 10.0.0)
@executable_path/libs/libIlmImf.6.dylib (compatibility version 7.0.0, current version 7.0.0)
@executable_path/libs/libImath.6.dylib (compatibility version 7.0.0, current version 7.0.0)
@executable_path/libs/libHalf.6.dylib (compatibility version 7.0.0, current version 7.0.0)
@executable_path/libs/libIlmThread.6.dylib (compatibility version 7.0.0, current version 7.0.0)
@executable_path/libs/libIex.6.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
@executable_path/libs/libz.1.dylib (compatibility version 1.0.0, current version 1.2.7)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
在我看來,它已經在正確複製的一切。但是,當我跑我的申請,我不斷收到同樣的異常:
Unhandled Exception: System.DllNotFoundException: ./libs/libIL.1.dylib
Unhandled Exception: System.DllNotFoundException: @executable_path/libs/libIL.1.dylib
Unhandled Exception: System.DllNotFoundException: libs/libIL.1.dylib
正如你所看到的,我已經嘗試了3種不同的參考圖書館的方式,但它始終沒有找到它。
任何幫助將不勝感激,我幾個月來一直在努力解決這個問題。
UPDATE: 如果我指定的dylib的絕對路徑,它發現它,但後來抱怨的依賴關係:
Mono: DllImport error loading library 'dlopen(/Users/me/myapp/libs/libil.1.dylib, 9): Library not loaded: @executable_path/libs/libtiff.5.dylib
Referenced from: /Users/me/myapp/libs/libil.1.dylib
Reason: image not found'.
在我看來,那@executable_path沒有被取代,實際的絕對可執行路徑。
我也有一個想法,@executable_path指向單聲道二進制。但是,下面的問題說,executable_path完全適用於單聲道應用程序:http://stackoverflow.com/questions/14536843/including-custom-dll-and-dylib-in-monomac-app有什麼想法? –
我依賴於你如何構建和執行你的應用程序。如果您使用的是MonoMac/Xamarin.Mac項目,那麼該答案是正確的(因爲構建過程將構建自定義啓動器並將libmono鏈接到它,而不是使用單聲道二進制本身),否則它不是。 –