gpt4 book ai didi

macos - 如何在 macOS 沙盒应用程序中使用插件中的 dylibs?

转载 作者:行者123 更新时间:2023-12-05 05:03:41 25 4
gpt4 key购买 nike

我正在写一个 plugin对于 macOS 应用程序。我的代码使用 OpenCV,我的构建过程链接到 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)

据我了解,我的插件在宿主应用程序的进程中运行,并且宿主应用程序是沙箱(与我的测试应用程序不同),所以错误 kindof 是有道理的。但我不知道修复它的最佳方法是什么。

我能想到三种可能的解决方案:

  1. 沙盒应用程序(以及在其中运行的插件)从不加载动态库。如果我想在我的插件中使用 OpenCV,我需要在我的插件二进制文件中静态构建它。
  2. 沙盒应用程序(以及在其中运行的插件)仅从特定的系统位置加载动态库,而在我的系统上,OpenCV 不在这样一个幸运的位置。如果我想让我的插件加载 OpenCV 动态库,我需要将它们放在/usr/local/opt 以外的地方(brew install 为我放置它们的地方)。这些动态库的正确位置是什么?
  3. 允许插件做主机应用程序不能做的事情(比如加载动态库),这是通过一些我不知道的权利配置巫术来实现的。那会是什么?

我的猜测是 #3 是错误的,#1 很可能是错的,但我希望 #2 可能是正确的。有人对插件、沙盒应用程序和动态库的交集有经验吗?

最佳答案

我能够让它与权利配置一起工作。

Profile.entitlements:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<false/>
</dict>
</plist>

https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_app-sandbox

到目前为止,我无法在启用沙箱的情况下dlopen

关于macos - 如何在 macOS 沙盒应用程序中使用插件中的 dylibs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61535142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com