在我之前提到的錯誤消息中,dylib
的名稱與您實際使用的名稱不同(3.2
與3.2.0
)的名稱不同。由於dylib
已經建成,並且您在您的項目中以這種方式包含它,所以現有的rpath
或id
已經存在。
使用otool
:
$ otool -l libopencv_core.3.2.0.dylib
...
Load command 3
cmd LC_ID_DYLIB
cmdsize 56
name @rpath/libopencv_core.3.2.dylib (offset 24)
time stamp 1 Wed Dec 31 17:00:01 1969
current version 3.2.0
compatibility version 3.2.0
...
Load command 16
cmd LC_RPATH
cmdsize 32
path /usr/local/lib (offset 12)
有兩件事情可以在這裏觀察;第一個是確認差異的LC_ID_DYLIB
,第二,存在的LC_RPATH
(rpath)被設置爲表示庫位置是/usr/local/lib
。既然你在應用程序中包含lib,它應該被更新。
更新庫(一個包含在你的應用程序):
$ install_name_tool -id @rpath/libopencv_core.3.2.0.dylib libopencv_core.3.2.0.dylib
更新的LC_ID_DYLIB
。
$ install_name_tool -add_rpath "@executable/../Frameworks" libopencv_core.3.2.0.dylib
添加正確的LC_RPATH
。
$ install_name_tool -delete_rpath "/usr/local/lib" libopencv_core.3.2.0.dylib
刪除從庫中rpath
/usr/local/lib
。爲了驗證再次運行otool -l
:
...
Load command 3
cmd LC_ID_DYLIB
cmdsize 64
name @rpath/libopencv_core.3.2.0.dylib (offset 24)
time stamp 1 Wed Dec 31 17:00:01 1969
current version 3.2.0
compatibility version 3.2.0
...
Load command 17
cmd LC_RPATH
cmdsize 40
path @executable/../Frameworks (offset 12)
現在你應該可以包括在獨立的應用程序的dylib
,它的路徑應設置正確;更新的dylib
是here。更新庫後,應用程序可以毫無問題地打開。
注:在你的問題要導入libopencv_core3.2.0.dylib
,雖然錯誤狀態libopencv_imgproc.3.2.dylib
,但我相信它的另一個dylib
其遭受類似的問題,所以這當然可以被應用到其他。該rpath
你原本在Xcode中設置是正確的
雖然因爲庫允許多個rpaths
存在,/usr/local/bin
已經存在它的使用位置首先,除了錯誤的名稱。
您是否在構建階段的'Link Binary with Libraries'中包含'dylib'?我還建議複製'dylib'並將其添加到'Frameworks'文件夾中的項目中,這樣在構建項目時就可以正確設置它。 –
@ l'l l是的,當然。否則編譯將會失敗。複製到項目確實沒有區別。該dylib需要在應用程序內完成上述複製階段。 –
嘗試添加'@ executable_path/Frameworks'來構建設置>鏈接>運行路徑搜索路徑。 –