我在两台较旧的戴尔塔式机和一台 Mac G5 上运行 Ubuntu 12.04。经过大量研究,我终于在其中一台戴尔机上安装了 Mono 3.12.0,但在另一台上却不行。我想将我的 3D 打印软件(需要 Mono 3+)移到 G5 上,因为它运行速度更快一些。
我尝试了各种存储库,但总是无法满足依赖关系,并且“您持有损坏的包”。尝试解决依赖关系时,似乎需要 mono-runtime,但我找不到它。
最后我从 Mono 开发者网站下载了 Mono 3.12.1.tar。在 Make 过程中出现了以下问题:
CC libmonoruntimesgen_static_la-sgen-layout-stats.lo
CC libmonoruntimesgen_static_la-sgen-qsort.lo
CCLD libmonoruntimesgen-static.la
CC pedump.o
CCLD pedump
./.libs/libmonoruntime.a(libmonoruntime_la-loader.o): In function `mono_stack_walk_async_safe':
/home/peter/Apps/mono-3.12.1/mono/metadata/loader.c:2322: undefined reference to `mono_sigctx_to_monoctx'
/usr/bin/ld: pedump: hidden symbol `mono_sigctx_to_monoctx' isn't defined
/usr/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
make[3]: *** [pedump] Error 1
make[3]: Leaving directory `/home/peter/Apps/mono-3.12.1/mono/metadata'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/peter/Apps/mono-3.12.1/mono'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/peter/Apps/mono-3.12.1'
make: *** [all] Error 2
我不是唯一一个遇到这个问题的人。抱歉,我是个愚蠢的 Mac 用户。
答案1
Mono 项目提供Xamarin 提供的 Mono 最新版本的安装说明:
Debian、Ubuntu 及其衍生产品
将 Mono 项目 GPG 签名密钥和软件包存储库添加到您的系统(如果您不使用
sudo
,请务必切换到 root):sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list sudo apt-get update
运行软件包升级以将现有软件包升级到最新版本。然后按照用法部分。
注意:虽然 APT 包是针对 Debian Wheezy 构建的,但它与许多 Debian 衍生产品(包括 Ubuntu)兼容,这意味着您可以在所有这些发行版中使用相同的存储库。
mod_mono
(Ubuntu 13.10 及更高版本、Debian 8.0 及更高版本)为了
mod_mono
在 Ubuntu 13.10 及更高版本以及 Debian 8.0 及更高版本(及其衍生产品)上启用安装,你需要在系统中添加第二个存储库,此外到上面的通用 Debian/Ubuntu 存储库(如果您不使用sudo
,请务必切换到 root):echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | sudo tee -a /etc/apt/sources.list.d/mono-xamarin.list
[…]
较旧的 Ubuntu 版本(Ubuntu 12.10 和 12.04)
为了能够在较旧的 Ubuntu 版本(例如 Ubuntu 12.04 和 Ubuntu 12.10(及其衍生产品))上进行安装,你需要在系统中添加第二个存储库,此外到通用的 Debian/Ubuntu 存储库(如果您不使用
sudo
,请务必切换到 root 权限):echo "deb http://download.mono-project.com/repo/debian wheezy-libtiff-compat main" | sudo tee -a /etc/apt/sources.list.d/mono-xamarin.list
[…]
用法
mono-devel
应该安装该包来编译代码。
mono-complete
应该安装该包来安装所有内容 - 这应该涵盖大多数“未找到程序集”错误的情况。
referenceassemblies-pcl
应安装该包以获得 PCL 编译支持 - 这将解决软件编译期间大多数“未安装框架:.NETPortable”错误的情况。
ca-certificates-mono
应安装此软件包以获取用于 HTTPS 连接的 SSL 证书。如果您在建立 HTTPS 连接时遇到问题,请安装此软件包。[…]
笔记
安装成功完成后,最好运行一下基本的 hello world 示例这一页验证 Mono 是否正常工作。
Linux 3.12 之前的 Mono 默认不信任任何 SSL 证书,因此访问 HTTPS 资源时会出现错误。现在不再需要这样做,因为 3.12 及更高版本包含一个新工具,该工具在软件包安装时运行,并将 Mono 的证书存储与系统证书存储同步(在旧版本中,您必须通过运行 导入 Mozilla 的受信任证书列表
mozroots --import --sync
)。某些系统的配置方式使得在安装 Mono 时不会提取必要的软件包,在这种情况下确保ca-certificates-mono
软件包已安装。