繁体   English   中英

单声道AOT分段故障 - 奇怪的问题

[英]Mono AOT Segmentation Fault - Strange Problem

我想测试Mono AOT,所以我用MonoDevelop编写了一个简单的控制台应用程序:

using System;

namespace abc
{
    public class Program
    {
        public static void Main()
        {
            Console.WriteLine("Hello World!");
        }
    }
}

它在bin / debug中创建了一个名为“abc.exe”的文件。 当我尝试做的时候:

mono abc.exe

有效。 所以,我试着AOT它。 我做了:

mono --aot abc.exe

它创建了一个名为abc.exe.so的文件。 当我尝试启动它时,它会抛出“Segmentation fault(core dumped)”错误。 继承单声道的输出--aot:

Code: 51 Info: 5 Ex Info: 8 Unwind Info: 31 Class Info: 30 PLT: 2 GOT Info: 11 GOT Info Offsets: 16 GOT: 20 Offsets: 48
Compiled 2 out of 3 methods (66%)
1 methods have other problems (33%)
Methods without GOT slots: 1 (33%)
Direct calls: 0 (100%)
JIT time: 1 ms, Generation time: 0 ms, Assembly+Link time: 0 ms.

我该如何解决?

谢谢。

斯科利马说的是对的,他投票结果很奇怪。

您不应该直接使用Mono的AOT编译器生成的输出。

Mono的AOT编译是一个缓存JIT编译输出的过程,并将其保存在由Mono运行时按需加载的共享库中。 生成的.so文件包含预编译的代码和运行时必须使用的元数据。

要使用AOT文件,您只需调用您的程序:

mono program.exe

Mono将从program.exe加载元数据并探测是否存在program.exe.so,以避免在运行时进行即时编译,而是使用.so文件中的代码。 相同的过程适用于引用的任何库。

即使是Mono的完整静态编译模式也会生成需要原始.exe文件的代码。

如果你想要实现的是本机可执行文件,你可以尝试使用mkbundle命令将Mono运行时和程序打包成一个可执行文件。

您不应该启动输出.so文件,只需在原始托管.exe上运行mono,它将自动获取AOT文件。

你的环境和Mono版本是什么?

AOT仅适用于x86,x86-64和ARM,仅适用于Linux和Mac。

如果您使用的是其中一个平台和最新的Mono版本(2.6),那么它听起来像是一个可能在http://www.mono-project.com/Bugs上提交的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM