Я пишу плагин для приложения MacOS. Мой код использует OpenCV, а мой процесс сборки связан с dylibs OpenCV.
Когда я собираю свой код как часть тестового приложения, все работает нормально. Но когда я строю свой код как плагин, хост-приложение не может загрузить плагин с этой ошибкой:
Error loading /Library/.../MyPlugin.plugin/Contents/MacOS/MyPlugin:
dlopen(/Library/.../MyPlugin.plugin/Contents/MacOS/MyPlugin, 0x0106): dependent dylib '/usr/local/opt/opencv@3/lib/libopencv_calib3d.3.4.dylib' not found for '/Library/.../MyPlugin.plugin/Contents/MacOS/MyPlugin'.
file system sandbox blocked open("/usr/local/opt/opencv@3/lib/libopencv_calib3d.3.4.dylib", O_RDONLY)
Насколько я понимаю, мой плагин запускается в процессе хост-приложения и хоста Приложение помещено в «песочницу» (в отличие от моего тестового приложения), поэтому ошибка имеет смысл. Но я не знаю, как лучше это исправить.
Есть три возможных решения, о которых я могу подумать:
- изолированные приложения (и плагины, работающие внутри них) ) никогда не загружайте dylibs. Если я хочу использовать OpenCV в своем плагине, мне нужно построить его статически в двоичном файле моего плагина.
- Приложения в изолированной среде (и плагины внутри них) загружают dylibs только из указанных c системных расположений, и в моей системе OpenCV не находится в таком удачном месте. Если я хочу, чтобы мой плагин загружал дилибы OpenCV, мне нужно поместить их где-то еще, чем / usr / local / opt (именно здесь
brew install
поместил их для меня). Каково было бы правильное расположение для этих dylibs? - Плагинам разрешено делать вещи, которые хост-приложение не может (например, load dylibs), и это достигается с помощью некоторых настроек config voodoo, которых я не знаю из. Что бы это было?
Я предполагаю, что № 3 ошибочен, а № 1 вероятен, но я надеюсь, что № 2 верно. Кто-нибудь имеет опыт пересечения плагинов, приложений-песочниц и dlib-файлов?