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一无所知,但我在某处读到过,它是一种应用的沙盒环境。如果这是真的,我所经历的问题会是由于这个吗?
这基本上是预期的。
正如您所推断的,问题在于FlatPak应用程序在沙盒中运行。FlatPak MonoDevelop只能看到:
- 它自己的/usr -由org.freedesktop.Runtime 提供
- 它自己的/app -所有为包构建的东西都在这里-例如Gtk#, FSharp, libgdiplus, Mono
- 你的主目录
- /dev,对于/dev/kvm之类的东西,如果我们出于某种原因需要
它看不到这些位置以外的任何东西。
要探索,您可以使用flatpak run --command=bash com.xamarin.MonoDevelop
,它将在运行时中为您提供一个shell,以便您可以看到实际内容。
如果你想要的东西没有捆绑,你有三个选择:
- 从NuGet中获取,如果它存在
- 无论如何,把它放在/home
- 构建自己的MonoDevelop,没有FlatPak的集装箱化,并使用它代替
在GUI应用中使用沙盒是Linux桌面应用的趋势,包括ide(例如GNOME Builder有完全相同的限制)