MonoDevelop 无法在 (L)Ubuntu 上找到共享库

MonoDevelop unable to find shared libs on (L)Ubuntu

我正在尝试使用 EmguCV 通过 MonoDevelop 进行一些图像处理。我可以构建该项目,但如果我尝试从 MonoDevelop 内部 debug/run 它,我会得到一个 DllNotFoundException 说它找不到 libdl.so。如果我 运行 直接编译程序(使用 mono emgucv_test.exe)一切正常。
这是一个控制台应用程序,我在 Gtk# 测试项目中得到了非常相似的行为,它说找不到 libgdiplus.so。但是,我可以通过 ldconfig -p |grep libgdiplus.
找到这两个库 所有这些让我相信,这既不是缺少库的问题,EmguCV/OpenCV 也不是单声道的问题,而是 MonoDevelop 的问题。

我尝试在项目 运行 配置中设置 LD_LIBRARY_PATH 环境变量,但没有帮助。我无法在网上找到任何相关内容,也不知道我还能尝试什么。问题是什么,我该如何解决?这只是一个测试应用程序,对于真正的项目,我需要能够使用 MonoDevelop 进行正确调试。

我在 VirtualBox VM 中的 Lubuntu 16.10(也在 Ubuntu 16.04 中测试)中 运行ning MonoDevelop 6.1.1(flatpak 版本),我安装了最新的单声道(v4.6.1)。

更新
我刚刚使用安装了 monodevelop 软件包(版本 5.10)的 MonoDevelop 对此进行了测试。有了这个就可以了。
我对 flatpak 一无所知,但我在某处读到过,它是一种应用程序的沙箱环境。如果这是真的,我遇到的问题会不会是因为这个?

这基本符合预期。

正如您推测的那样,问题在于沙盒中的 FlatPak 应用程序 运行。 FlatPak MonoDevelop 只能看到:

  • 它自己的 /usr - 由 org.freedesktop.Runtime
  • 提供
  • 它自己的 /app - 为包构建的一切都在那里 - 例如Gtk#、FSharp、libgdiplus、Mono
  • 您的主目录
  • /dev,对于 /dev/kvm 之类的东西,如果我们出于某种原因需要它

它看不到这些位置之外的任何东西。

要探索,您可以使用 flatpak run --command=bash com.xamarin.MonoDevelop,它会在 运行 时间内给您一个 shell,这样您就可以看到实际内容。

如果您想要的没有捆绑,您有以下三种选择:

  1. 从 NuGet 中获取它,如果它存在的话
  2. 不管怎样,在 /home 的某处提供它
  3. 构建您自己的 MonoDevelop,没有 FlatPak 的容器化,而是使用它

为 GUI 应用程序使用沙箱是 Linux 桌面应用程序的趋势,包括 IDE(例如 GNOME Builder 具有完全相同的限制)