我试图使用EmguCV通过MonoDevelop进行一些图像处理。我可以构建项目,但是如果我尝试从MonoDevelop内部调试/运行它,则会收到一个DllNotFoundException,说它找不到libdl.so。如果我直接运行编译的程序(使用mono emgucv_test.exe),一切正常。
这是一个控制台应用程序,对于Gtk#测试项目,我说它找不到libgdiplus.so,它的行为非常相似。我可以使用ldconfig -p |grep libgdiplus找到两个库。
所有这些使我相信,这与缺少lib,EmguCV / OpenCV或mono无关,而与MonoDevelop无关。

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

我在VirtualBox VM中的Lubuntu 16.10(也在Ubuntu 16.04中测试)上运行MonoDevelop 6.1.1(flatpak版本),我安装了最新的mono(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,以便您可以查看实际内容。

    如果您想要的东西没有 bundle 在一起,则有三种选择:
  • 从NuGet抓取它(如果存在的话)
  • 一种或另一种方式,在/ home
  • 中的某个位置提供它
  • 构建您自己的MonoDevelop,使用FlatPak的容器化,然后使用

  • 在Linux桌面应用程序(包括IDE)中,将沙箱用于GUI应用程序是一种趋势(例如GNOME Builder具有完全相同的限制)

    关于c# - MonoDevelop无法在(L)Ubuntu上找到共享库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40605631/

    10-13 06:52