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

本文关键字:共享 Ubuntu MonoDevelop | 更新日期: 2023-09-27 18:18:01

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

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

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


我刚刚用安装了monodevelop包(版本5.10)的MonoDevelop测试了这一点。有了这个,它就可以工作了。
我对flatpak一无所知,但我在某处读到过,它是一种应用的沙盒环境。如果这是真的,我所经历的问题会是由于这个吗?

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

这基本上是预期的。

正如您所推断的,问题在于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有完全相同的限制)