我的目标是修改C全局变量。
假设我有以下C头文件:
/* test.h */
int global_variable;
和C源文件:
/* test.c */
#include "stdio.h"
#include "test.h"
extern int global_variable;
void test(void) {
FILE *fp;
fp = fopen("output.txt", "w");
fprintf(fp, "Global variable: %d\n", global_variable);
}
global_variable正确显示在
生成的共享库中gcc -c -fPIC test.c
gcc -shared -o libtest.so test.o
我的lisp界面如下所示:
(ql:quickload :cffi)
(cffi:define-foreign-library libtest
(:unix (:default "./libtest"))
(t (:default "./libtest")))
(cffi:use-foreign-library libtest)
(cffi:defcvar ("global_variable" *global-variable*) :int)
(cffi:defcfun "test" :void )
我可以在没有错误的情况下调用test,但是我无法使用
修改global_variable(setf *global-variable* 42)
我得到一个警告未定义变量,然后定义(我假设)一个新变量。
所以问题是如何修改常见的lisp(sbcl)中的global_variable?
提前谢谢!
答案 0 :(得分:0)
对于你的结构,这样的东西应该有效:
(cffi:with-foreign-object (ptr 'block)
;; setf the slots
(setf (cffi:foreign-slot-value ptr 'block 'a) 12) ...etc.