我正在开发一个在C项目中使用的chicken库。当我尝试加载egg(例如(use intarweb)
(时,运行时会抱怨加载egg失败。
(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: |xcfxfaxedxfex07x00x00x01x03x00x00x00x08x00x00x00|
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
如果要动态加载扩展(use
就是这样做的(,请不要使用-static
。
如果你真的想静态地链接intarweb,你必须静态地编译它和它的所有依赖项(大多数CHICKEN 4 eggs目前在它们的设置文件中没有这样做,所以你必须手动完成(并将它们链接进来,并使用(declare (uses intarweb)) (import intarweb)
而不仅仅是(use intarweb)
。这里有一个关于如何做到这一点的教程。不幸的是,这有点涉及鸡4。
在CHICKEN 5中,chicken-install
已被重写,以便更容易地支持鸡蛋的静态编译。如果你愿意,你已经可以试用最新的候选版本了。许多鸡蛋已经被移植(包括intarweb(,它应该足够稳定,可以使用;我们预计这将是最后一个候选版本。