Моно «асмонли» вариант - PullRequest
1 голос
/ 13 января 2010

Я создал простой моно-исполняемый файл с использованием MonoDevelop, который печатает «привет мир» Я хотел попробовать вариант AOT 'asmonly'. Итак:

[root@localhost Debug]# ls
abc.exe
[root@localhost Debug]# mono --aot=full,static,asmonly abc.exe
Mono Ahead of Time compiler - compiling assembly /home/alon/Projects/abc/abc/bin/Debug/abc.exe
Code: 1538 Info: 50 Ex Info: 114 Class Info: 30 PLT: 5 GOT Info: 105 GOT Info Offsets: 24 GOT: 60
Output file: '/home/alon/Projects/abc/abc/bin/Debug/abc.exe.s'.
Linking symbol: 'mono_aot_module_abc_info'.
Compiled 9 out of 9 methods (100%)
Methods without GOT slots: 1 (11%)
Direct calls: 0 (100%)
JIT time: 1 ms, Generation time: 0 ms, Assembly+Link time: 0 ms.
GOT slot distribution:
    class: 1
    image: 1
    ldstr: 1
    interruption_request_flag: 7
[root@localhost Debug]# ls
abc.exe  abc.exe.s
[root@localhost Debug]# as -o hello_world.o abc.exe.s
[root@localhost Debug]# ls
abc.exe  abc.exe.s  hello_world.o
[root@localhost Debug]# ld -o hello_world.so hello_world.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000008049000
[root@localhost Debug]# ls
abc.exe  abc.exe.s  hello_world.o  hello_world.so
[root@localhost Debug]# ./hello_world.so
Segmentation fault (core dumped)
[root@localhost Debug]# 

Почему у меня ошибка сегментации? Я использую Fedora 12 x64. А что такое ошибка "не удается найти символ _start записи" в ld?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 января 2010

AOT все еще требует времени выполнения Mono для GC, IO-слоя, отражения, потоков, генерации кода времени выполнения и т. Д. Он просто предварительно компилирует тот код, который JIT скомпилирует, и помещает его в разделяемую библиотеку. «Реальная» точка входа, которая запускает Mono runtime, все еще находится в Mono.

0 голосов
/ 13 января 2010

_start - точка входа для вашего двоичного файла. Это функция, которую ОС вызывает для запуска и запуска вашего двоичного файла. У вас определена основная функция?

Это работает, когда вы не используете AOT? (Т.е. работает mono hello_world.exe.)

...