Как статически связать программу 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 ответ:
Предполагая, что ваша программа находится в 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