2016-11-11 22 views
2

我在Xcode中用OpenCV for OS X創建了C++ Unity插件。該插件編譯並在我的Mac上工作,但在其他機器上,它嘗試從/ usr/lib下載動態庫(例如,ffmpeg,libtiff,webp)本地/ opt ...(庫未加載:/usr/local/opt/webp/lib/libwebp.6.dylib等)如何避免在C++項目(XCode)中的其他機器上加載動態庫?

Brew安裝解決了這個問題,但有必要分發這個插件「as是」。

我有2個問題: 1)如何知道我的項目是否會嘗試使用動態庫(在其他機器上)?

2)我該如何讓我的項目從bundle中加載它們,而不是從/ usr/local/opt加載它們? (我嘗試鏈接-static,但有136個錯誤「架構x86_64的未定義符號 - _OSSpinLockLock,_dispatch_get_global_queue和其他許多內容)。

回答

0

我不知道如何回答你的第一個問題...如果你不知道你的項目與誰鏈接的庫有哪些?

對於第二個問題,你需要設置動態庫的「安裝名稱」,你會很容易地找到關於它的詳細信息和關於install_name_tool命令行用於操縱它,但本質上它是存儲路徑的.dylib內部的一個變量,該路徑告訴二進制文件鏈接到哪裏找到它,當您將dylib綁定到可部署文件時,通常會設置安裝名稱事端像@executable_path/path/relative/to/executable/。 安裝名稱是在將庫編譯爲編譯器標誌時設置的,或者稍後可以在dylib文件上使用install_name_tool進行設置。

另請注意Xcode構建設置中與此相關的'Runpath Search Path'選項。

我希望這足以讓你指出你需要的方向。

+0

對於第一個問題:我知道我的項目使用OpenCV(編譯)。但是我怎麼知道,OpenCV會嘗試加載libwebp.6.dylib?是否有一些實用工具可以掃描包並發現它? – artbataev

+0

@artbataev是的,在OS X上有''otool'命令行來檢查庫鏈接的內容(看看[這裏](http://tech-queries.blogspot.ie/2011/04/dynamic-library -dependency-ON-MAC-OS-x.html))。 –

相關問題