【发布时间】:2016-02-17 03:43:58
【问题描述】:
如果可能的话,我想知道在 CHICKEN-Scheme 中动态加载编译代码的最佳方式。 API 声明 load 只加载源文件。
具体来说,我动态加载代码的目标是能够覆盖以前定义的函数。也就是说,库 1 中的 foo 将被库 2 中的另一个 foo 替换。
【问题讨论】:
标签: scheme chicken-scheme
如果可能的话,我想知道在 CHICKEN-Scheme 中动态加载编译代码的最佳方式。 API 声明 load 只加载源文件。
具体来说,我动态加载代码的目标是能够覆盖以前定义的函数。也就是说,库 1 中的 foo 将被库 2 中的另一个 foo 替换。
【问题讨论】:
标签: scheme chicken-scheme
load 的 documentation 表示
在支持它的平台上(目前是BSD、Haiku、MacOS X、Linux、Solaris和Windows),load可以用来加载编译好的程序
这意味着您可以实际加载带有load 的.so 文件。替换标识符是可能的,只需将其set!ting 为不同的值。
如果你想从任意目录动态加载代码,我认为load 是你最好的选择。
【讨论】:
csc -t lib-1.ss将lib-1.ss编译为c,然后用gcc -shared lib-1.so -fPIC lib-1.c编译.so文件有一个烦人的限制在加载.so 文件时:“编译后的文件只能加载一次。随后尝试加载同一文件无效。”但是正如你所说,我可以使用set! 解决这个问题
gcc -shared -o lib-1.so -fPIC lib-1.c