将鸡方案库嵌入 C 项目时无法加载任何鸡蛋



我正在开发一个在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(,它应该足够稳定,可以使用;我们预计这将是最后一个候选版本。

相关内容

  • 没有找到相关文章

最新更新