贡献者: addis
julia.h,库文件:libjulia
#include <julia.h>
JULIA_DEFINE_FAST_TLS // only define this once, in an executable
// (not in a shared library) if you want fast code.
int main(int argc, char *argv[])
{
jl_init(); // 初始化
jl_eval_string("print(sqrt(2.0))"); // 执行 julia 代码
jl_value_t *ret = jl_eval_string("sqrt(2.0)"); // 返回 boxed value
if (jl_typeis(ret, jl_float64_type)) { // 判断类型
double ret_unboxed = jl_unbox_float64(ret); // 取出值
printf("sqrt(2.0) in C: %e \n", ret_unboxed);
}
else
printf("ERROR: unexpected type\n");
// 通过 API 调用函数
jl_function_t *func = jl_get_function(jl_base_module, "sqrt"); // 函数句柄
jl_value_t *argument = jl_box_float64(2.0); // 打包 box
jl_value_t *ret = jl_call1(func, argument); // 调用函数(数字支持 0,1,2,3)
// finalize
jl_atexit_hook(0);
return 0;
}
jl_isa(), jl_typeis(), jl_is_*()。例如 jl_typeis(val, jl_float64_type)
jl_value_t *a = jl_box_float64(3.0);
gcc -o test -fPIC -I$JULIA_DIR/include/julia -L$JULIA_DIR/lib -Wl,-rpath,$JULIA_DIR/lib test.c -ljulia
jl_init(), jl_init_with_image_file(), jl_init_with_image_handle() 后者使用预编译 image。
jl_eval_string("print(sqrt(2.0))"); 执行字符串中的 julia 代码。
jl_value_t *jl_call(jl_function_t *f, jl_value_t **args, int32_t nargs)。