我需要在Linux环境中使用Mono编写Gtk#应用程序。由于我需要> = 3.22中的特定功能,因此我无法使用默认的Gtk2库。
到目前为止尝试的步骤:
sudo apt-get install libgtk-3-dev
。运行一个简单的Gtk#应用程序(在main中简单为Gtk.Application.Init()
)会触发以下异常:
System.DllNotFoundException: libgtk-3.so.0
尽管ldconfig -p | grep libgtk
在/usr/lib/x86_64-linux-gnu
下返回了此类文件。
我觉得我在这里错过了一些非常明显的东西。我正在运行Ubuntu 17.10(x86),MonoDevelop 7.1 build 1291。
编辑 - 问题在于通过Flatpak安装MonoDevelop,它提供了一个沙盒环境,可以屏蔽"来自外部参考的应用程序,包括Gtk库。因此,我安装Mono并在this guide之后编译MonoDevelop几乎逐字:
添加回购列表并更新所有内容(Ubuntu' s" factory-default" repos附带4.oome版本的Mono,这还不足以编译Monodevelop,因为它缺乏的MSBuild):
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/mono-official.list
sudo apt update && sudo apt upgrade -y
安装所需的依赖项:
sudo apt install -y autoconf automake cmake fsharp git gnome-sharp2 gtk-sharp2 libssh2-1-dev mono-complete referenceassemblies-pcl zlib1g-dev
从git克隆Monodevelop,X是我们从here(用7.3.0.708测试)中选择的版本,最后一个参数是源所在的文件夹:
git clone https://github.com/mono/monodevelop.git --branch monodevelop-X --depth 1 X
配置,制作和安装:
./configure --profile=stable --enable-release
make
sudo make install
安装GtkSharp 3:
sudo apt-get install libgtk-3-dev
就是这样。使用前面提到的package开发的应用程序将正常工作。
出于某种原因,我的应用程序在从MonoDevelop内部运行时崩溃(与Builder.ExtendWithTemplate
导入的Glade文件有关),但是从命令行mono <appname>.exe
开始工作,所以我的解决方案可能不是最好的,但那是一个开始。