Не удается загрузить яйцо при встраивании библиотеки Chicken Scheme в проект C - PullRequest
0 голосов
/ 31 октября 2018

Я работаю над куриной библиотекой, которую я использую в C-проекте. Когда я пытаюсь загрузить яйца (например, (use intarweb)), среда выполнения жалуется на невозможность загрузить яйцо.

(lldb) run
Error: (require) cannot load extension: intarweb

    Call history:

    bridge-connector.scm:6: ##sys#require       <--
Process 56172 exited with status = 70 (0x00000046)

Мне было интересно, не удалось ли среде выполнения определить местонахождение яиц, поэтому я попытался установить переменную среды CHICKEN_INCLUDE_PATH безуспешно:

export CHICKEN_INCLUDE_PATH="/usr/local/Cellar/chicken/4.13.0/lib/chicken/8/"

Я даже пытался использовать load напрямую с полным путем:

(load "/usr/local/Cellar/chicken/4.13.0/lib/chicken/8/intarweb.so")

но получил следующую ошибку:

(lldb) run
Error: unbound variable: |\xcf\xfa\xed\xfe\x07\x00\x00\x01\x03\x00\x00\x00\x08\x00\x00\x00|

    Call history:

    bridge-connector.scm:6: load

Я использую Chicken Scheme 4 и инициализирую среду выполнения Chicken Scheme следующим образом:

#include <chicken.h>

void my_lib_initialize()
{
  C_word k = CHICKEN_run(C_toplevel);
  (void)k;
}

Библиотека My Chicken построена следующим образом:

csc -embedded -debug-info -d3 -J -c bridge-connector.scm
csc -embedded -debug-info -d3 -c my-lib.scm
csc -c my_lib_initialize.c
csc ./my_lib_initialize.o ./my-lib.o ./bridge-connector.o -shared -embedded -static -debug-info -d3 -o libmy-lib.dylib

1 Ответ

0 голосов
/ 31 октября 2018

Не используйте -static, если вы хотите динамически загружать расширения (что и делает use).

Если вы действительно хотите статически связать intarweb, вам нужно статически скомпилировать его и все его зависимости (что большинство яиц CHICKEN 4 в настоящее время не делают в своем установочном файле, поэтому вы должны сделать это вручную) и связать их, и использовать (declare (uses intarweb)) (import intarweb) вместо просто (use intarweb). Вот учебник о том, как это сделать. К сожалению, это немного связано с CHICKEN 4.

В CHICKEN 5 chicken-install был переписан, чтобы упростить поддержку статической компиляции яиц. Если хотите, вы уже можете опробовать последнюю версию кандидата . Многие яйца уже портированы (включая intarweb), и они должны быть достаточно стабильными для использования; мы ожидаем, что это будет последний релиз-кандидат.

...