• Как скомпилировать Lisp файл в exe`шник?

    @capuccio
    Живой пример компиляции: пример использования лог-системы -- коротенькая программа загружающая лог-пакет и выводящая несколько лог-сообщений.
    1. Идёт речь об SBCL и линукс.
    2. Имеются различные способы компиляции, этот был первым, который заработал для меня.
    3. Kомпилируемая программа оформляется в виде пакета с примерно таким вот asd-файлом
    #+sb-core-compression
    (defmethod asdf:perform ((o asdf:image-op) (c asdf:system))
      (uiop:dump-image (asdf:output-file o c) :executable t :compression t))
    (defsystem "simple-log/example"
    :class :package-inferred-system
    :depends-on (....); usual dependences
    :build-operation  "program-op"
    :build-pathname "example.bin"
    :entry-point "simple-log/example:main"
    :description "a compilable example for simple-log"
    :version 0.1
    :components ((:file "example")))

    4. Опция :entry-point указывает на функцию пакета (вроде "main" в C), которая будет запущена при старте.
    5. Если вы хотите, чтобы бинарник был 15 мб (для простой программульки) вместо 50-60Мб, рекомендуется скомпилировать SBCL с ключом --with-sb-core-compression:
    sh make.sh --with-sb-core-compression
    6. См. Makefile: чтобы скомпилировать пакет, мы сначала устанавливаем его в качестве локального в quicklisp-каталог
    (~/quicklisp/local-projects/simple-log в моём случае); после этого запускаем
    ~/local/bin/sbcl --quit --eval "(asdf:make :simple-log/example)"

    где ~/local/bin/sbcl — мой собственноручно (ради --with-sb-core-compression) скомпилированный SBCL.
    7. Результат компиляции будет записан в тот же каталог, где находится пакет; в моём случае это
    ~/quicklisp/local-projects/simple-log/example.bin
    8. Да, по первому разу это сложно, но я привык.
    Ну а что касается DEB-пакета, то это -- отдельная песня. Но можно из бинарников сделать deb, хоть это и не по-нашему, по-бразильскидебиановски.
    Ответ написан
    Комментировать