将Chicken Scheme库嵌入C项目时无法加载任何鸡蛋
Can't load any egg when embedding Chicken Scheme library into C project
我正在开发一个在 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)
我想知道是不是runtime没有定位egg的安装位置,所以我尝试设置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
如果您想动态加载扩展(use
就是这样做的),请不要使用 -static
。
如果你真的想 link 静态地在 intarweb 中,你必须静态地编译它和它的所有依赖项(大多数 CHICKEN 4 eggs 目前没有在他们的安装文件中做,所以你必须手动完成)和 link 它们,并使用 (declare (uses intarweb)) (import intarweb)
而不仅仅是 (use intarweb)
。 a tutorial 介绍了如何做到这一点。不幸的是,这有点涉及CHICKEN 4。
在 CHICKEN 5 中,chicken-install
已被重写以使其更容易支持鸡蛋的静态编译。如果你喜欢,你已经可以try out the latest release candidate。已经移植了很多egg(包括intarweb),应该可以稳定使用;我们希望这是最后一个候选版本。
我正在开发一个在 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)
我想知道是不是runtime没有定位egg的安装位置,所以我尝试设置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
如果您想动态加载扩展(use
就是这样做的),请不要使用 -static
。
如果你真的想 link 静态地在 intarweb 中,你必须静态地编译它和它的所有依赖项(大多数 CHICKEN 4 eggs 目前没有在他们的安装文件中做,所以你必须手动完成)和 link 它们,并使用 (declare (uses intarweb)) (import intarweb)
而不仅仅是 (use intarweb)
。 a tutorial 介绍了如何做到这一点。不幸的是,这有点涉及CHICKEN 4。
在 CHICKEN 5 中,chicken-install
已被重写以使其更容易支持鸡蛋的静态编译。如果你喜欢,你已经可以try out the latest release candidate。已经移植了很多egg(包括intarweb),应该可以稳定使用;我们希望这是最后一个候选版本。