9
votes

Défaut de segmentation mono aot - problème étrange

Je voulais tester Mono Aot, donc j'ai écrit une simple application de console avec monodevelop: xxx pré>

Il a créé un fichier nommé "abc.exe" dans bin / débogage. Quand j'essaie de faire: P>

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.


0 commentaires

3 Réponses :


1
votes

Quel est votre environnement et votre version mono?

AOT fonctionne uniquement sur x86, X86-64 et bras, et uniquement sur Linux et peut-être Mac.

Si vous êtes sur l'une de ces plates-formes et sur la dernière version mono (2.6), il ressemble à un bug qui devrait probablement être déposé à http://www.mono-project.com/bugs .


0 commentaires

5
votes

Vous ne devriez pas démarrer le fichier de sortie .SO, il vous suffit d'exécuter mono sur l'original géré .exe et il récupérera le fichier AOT automatiquement.


0 commentaires

7
votes

Qu'est-ce que Skolima a dit raison, il est assez étrange qu'il ait été voté.

Vous n'êtes pas censé utiliser directement la sortie générée par le compilateur AOT de Mono.

La compilation AOT de Mono est un processus qui cache la sortie de la compilation JIT et la laisse dans une bibliothèque partagée chargée par le temps d'exécution mono à la demande. Le fichier .so généré contient le code pré-compilé et les métadonnées nécessaires à être consommées par le temps d'exécution.

Pour utiliser le fichier AOT, vous venez d'appeler votre programme comme celui-ci:

mono programme.exe

Mono chargera les métadonnées à partir de programme.exe et de sonde pour l'existence d'un programme.exe.so pour éviter de faire une compilation juste à temps au moment de l'exécution et utilisez plutôt le code du fichier .so. Le même processus est appliqué sur toutes les bibliothèques référencées.

Même le mode compilation statique de Mono produit du code qui nécessite le présent fichier .exe d'origine.

Si ce que vous vouliez réaliser était un exécutable natif, vous pouvez essayer la commande mkbundle qui conditionnent le mono exécutant et votre programme dans un seul exécutable.


0 commentaires