Как статически связать программу Chicken Scheme, которая использует расширения?


Мне нужно скомпилировать и статически связать куриную программу. Я ожидаю использовать много расширений, в частности http-client.

Я могу скомпилировать исходный код с помощью следующей команды:

csc -compile-syntax -static linux-setup.scm

Или

csc -R http-client -compile-syntax -static linux-setup.scm

Но когда я запускаю его, я получаю следующую ошибку:

Error: (require) cannot load extension: http-client

    Call history:

    ##sys#require           <--

Я также пытался (declare (uses http-client)) в источнике, но безуспешно:

linux-setup.o: In function `f_369':
/mnt/data/Documents/Programming/chicken-scheme/linux-setup/linux-setup.c:219:
 undefined reference to `C_http_2dclient_toplevel'
collect2: error: ld returned 1 exit status

Error: shell command terminated with non-zero exit status 256: 'gcc' 'linux-setup.o'
 -o 'linux-setup' -L"/usr/lib"  -Wl,-R"/usr/lib" -static '/usr/lib/libchicken.a' -lm -ldl

Статическое связывание-это то, что мненужно . Это не проблема XY. Мне нужны мои исполняемые файлы для запуска на свежеустановленная система Linux без каких-либо зависимостей. Это основная причина, по которой я перешел с Common Lisp на Scheme в первую очередь.

Что я делаю не так, пожалуйста?
1 2

1 ответ:

Предполагая, что ваша программа находится в A-программе.файл scm:

csc -deploy a-program.scm
cd a-program/
chicken-install -deploy -p $PWD http-client

... и вуаля!

Edit: оказывается, что правильный ответ на поставленную задачу решается в этом документе: http://www.foldling.org/scheme.html#compiling-statically-linked-chicken-scheme-programs-with-extensions