![为什么Mono应用程序只从自己的目录启动?](https://linux22.com/image/22780/%E4%B8%BA%E4%BB%80%E4%B9%88Mono%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%8F%AA%E4%BB%8E%E8%87%AA%E5%B7%B1%E7%9A%84%E7%9B%AE%E5%BD%95%E5%90%AF%E5%8A%A8%EF%BC%9F.png)
如果我想运行该应用程序monodevelop
,我需要 chdir/usr/lib/monodevelop/Bin
然后执行./MonoDevelop.exe
。这对于所有其他 Mono 应用程序(例如banshee
、tomboy
等)都是相同的。
如果我尝试通过简单地运行从另一个位置运行 Mono 应用程序monodevelop
,甚至从它们自己的目录运行,我会得到类型初始化异常像这样:
behrooz@behrooz:/usr/lib/monodevelop/bin$ monodevelop
致命错误 [2012-05-04 11:24:39Z]:MonoDevelop 无法启动。运行 MonoDevelop 所需的某些
程序集(例如 gtk-sharp、
gnome-sharp 或 gtkhtml-sharp)可能未正确安装在
GAC 中。 System.TypeInitializationException:
Gtk.Application 的类型初始值设定项引发异常--->
System.EntryPointNotFoundException: glibsharp_g_thread_supported at
(wrapper Managed-to-native) GLib.Thread:glibsharp_g_thread_supported
() at GLib.Thread.get_Supported () [ 0x00000] in :0
at Gtk.Application..cctor () [0x00000] in :0 ---
内部异常堆栈跟踪结束 --- at
MonoDevelop.Ide.IdeStartup.Run (MonoDevelop.Ide.MonoDevelopOptions
选项) [0x0007e ] 在
/home/behrooz/Desktop/Monodevelop/monodevelop-2.8.6.5/src/core/MonoDevelop.Ide/MonoDevelop.Ide/IdeStartup.cs:95
位于 MonoDevelop.Ide.IdeStartup.Main (System.String[] args) [0x0004f] 在
/home/behrooz/Desktop/Monodevelop/monodevelop-2.8.6.5/src/core/MonoDevelop.Ide/MonoDevelop.Ide/IdeStartup.cs:503
这是为什么?
我尝试重新安装所有 Mono、Wine、GTK、Glib、X、Gnome 软件包。
apt-get --purge --reinstall install $(dpkg --get-selections | grep mono | grep install | grep -v deinstall | awk'{print $1}')
我还尝试了“open”上的strace,但我自己什么也没得到。
系统配置:
- Debian 6.0-更新 64 位
- 内核 3.2.0-2、3.2.0-1、3.1 和 3 编辑:不是内核的事情
- Gnome 3.4 编辑:但是 gnome 的事情
- 单声道2.10.5
TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: softdebug LLVM: supported, not enabled. GC: Included Boehm (with typed GC and Parallel Mark)
更新:升级到新的 MonoDevelop 3.0.2 和最新的 Mono,我可以monodevelop
在终端中使用命令运行 MonoDevelop,无需 chdir。但 gnome-shell 无法运行它。
终于找到了:
作为root:
cd /usr/local/
find | grep mono|xargs rm -rf
# Use with caution/some applications may get messed up (stellarium has MONOchrome images...)
答案1
看起来您已经monodevelop
从源代码构建并安装了 - 您是否对类似的依赖项执行了相同的操作gtksharp
?由于banshee
和tomboy
已损坏,听起来您在损坏的程序之间共享了依赖项,这是一个明显的候选者。 CLI 单声道应用程序可以工作吗?
如果可能的话,我们强烈建议您安装软件包中的所有内容。如果不是您,您应该使用并行单声道环境。除非您完全理解执行 do 的含义,否则请勿将任何内容安装到 /usr 或 /usr/local。
如果其他单声道应用程序只能从已安装的monodevelop
树中运行,并且重新安装软件包没有帮助,那么您可能会在源安装添加的周围漂浮一些额外的东西,这会干扰mono
查找其库,可能会硬编码路径安装monodevelop
。
我的 Debian-fu 并不强大,但应该有一种方法可以识别不知道的文件/usr
,dpkg
这可能是一个起点。