Я скомпилировал исходники из haskell в .ll
файлы с GHC.Затем я сгенерировал несколько .bc
(байт-код), используя команду llvm-as
.
После этого я связал все в один .bc
, используя команду llvm-link
.Затем оптимизируется с помощью команды opt.
Конечный результат пытался выполнить с помощью команды lli
(JIT), но произошла следующая ошибка:
функция 'main' не найденав модуле.
Кто-нибудь знает, как это сделать?
Хорошо.Что я делаю?Я пытаюсь скомпилировать проект yesod в NixOS.
Сначала я использовал:
$ stack --nix-packages llvm_39 build --ghc-options = "-fllvm -keep-llvm-files"
Это сгенерировало .ll
, соответствующее источникам.Я получил эти .ll
и скопировал в другой каталог.Затем я использовал llvm-as
для компиляции, чтобы bytecod каждый из них:
$ llvm-as <filename>
Затем я собрал все это в один файл.Что у меня есть в проекте yesod, так это то, как вы знаете: main:
import Prelude (IO)
import Application (appMain)
main :: IO ()
main = appMain
Я подумал, что после того, как собрать все вместе в .bc, я смогу запустить с lli
, как это возможно, когда.exe генерируется.С yesod только .exe
, папка config и статическая папка в одном месте и cabum!
Проект yesod был сгенерирован с помощью шаблона postgre, и я даже еще не запрограммировал его.Я тестирую сборку.
Вовремя.
Файлы:
Application.ll
Common.ll
Foundation.ll
Import.ll
Model.ll
Paths_TesteYesod.ll
Settings.ll
Comment.ll
DevelMain.ll
Home.ll
main.ll
NoFoundation.ll
Profile.ll
StaticFiles.ll
Я использовал llvm-link для всех, чтобы получить TestYesod.bc