我正在研究在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;
}
我的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
答案 0 :(得分:2)
如果要动态加载扩展名(-static
就是这么做的),请不要使用use
。
如果您真的想静态链接intarweb,则必须静态编译它及其所有依赖项(大多数CHICKEN 4蛋当前不在其安装文件中执行,因此必须手动执行)并链接它们,并使用(declare (uses intarweb)) (import intarweb)
而不是(use intarweb)
。这是a tutorial的操作方法。不幸的是,这与“鸡4”有关。
在《鸡肉5》中,chicken-install
已被重写,以使其更容易支持鸡蛋的静态编译。如果愿意,您可以try out the latest release candidate。已经移植了许多鸡蛋(包括intarweb),并且应该足够稳定以便使用。我们希望这是最新的候选版本。