Как использовать dylibs из плагина внутри изолированного приложения macOS? - PullRequest
0 голосов
/ 01 мая 2020

Я пишу плагин для приложения 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)

Насколько я понимаю, мой плагин запускается в процессе хост-приложения и хоста Приложение помещено в «песочницу» (в отличие от моего тестового приложения), поэтому ошибка имеет смысл. Но я не знаю, как лучше это исправить.

Есть три возможных решения, о которых я могу подумать:

  1. изолированные приложения (и плагины, работающие внутри них) ) никогда не загружайте dylibs. Если я хочу использовать OpenCV в своем плагине, мне нужно построить его статически в двоичном файле моего плагина.
  2. Приложения в изолированной среде (и плагины внутри них) загружают dylibs только из указанных c системных расположений, и в моей системе OpenCV не находится в таком удачном месте. Если я хочу, чтобы мой плагин загружал дилибы OpenCV, мне нужно поместить их где-то еще, чем / usr / local / opt (именно здесь brew install поместил их для меня). Каково было бы правильное расположение для этих dylibs?
  3. Плагинам разрешено делать вещи, которые хост-приложение не может (например, load dylibs), и это достигается с помощью некоторых настроек config voodoo, которых я не знаю из. Что бы это было?

Я предполагаю, что № 3 ошибочен, а № 1 вероятен, но я надеюсь, что № 2 верно. Кто-нибудь имеет опыт пересечения плагинов, приложений-песочниц и dlib-файлов?

...