【问题标题】:Julia retrieve global variable in CJulia 在 C 中检索全局变量
【发布时间】:2020-06-09 16:24:06
【问题描述】:

我想从我的 C 应用程序中检索我刚刚在 Julia 中设置的全局变量 x。 这是我到目前为止的代码:

#include <julia.h>

void SimpleExecute(char *command, char *resultVar, char* result) {

    jl_eval_string(command);

    jl_value_t *var = jl_get_global(jl_base_module, jl_symbol(resultVar));

    const char *str = jl_string_ptr(var);

    sprintf(result, "%s", str);
}

int main(int argc, char *argv[])
{
    char* result = malloc(sizeof(char) * 1024);

    jl_init();

    //(void)jl_eval_string("println(sqrt(2.0))"); //works
    (void)SimpleExecute("x=sqrt(2.0)", "x", result);

    jl_atexit_hook(0);
    return 0;
}

但是调试器显示varjl_get_global 调用之后仍然是NULL。为什么? 我关注了this tutorial,但它没有涉及任意变量检索。 Source code 显示类似的用法。

【问题讨论】:

    标签: c julia read-eval-print-loop


    【解决方案1】:

    我认为这里发生了一些事情:

    首先,您需要使用jl_main_module 而不是jl_base_module

    其次,不能使用jl_string_ptr获取整数或浮点值的字符串值。您可以使用x=string(sqrt(2.0)) 作为运行命令,也可以使用jl_unbox_float64 作为一个函数来拆箱您从 Julia 获得的值。

    #include <julia.h>
    #include <stdio.h>
    
    void SimpleExecute(char *command, char *resultVar, const char* result) {
    
        jl_eval_string(command);
    
        jl_value_t *var = jl_get_global(jl_main_module, jl_symbol(resultVar));
    
    
        if (var && jl_is_string(var)) {
            const char * str = jl_string_ptr(var);
            printf("%s\n", str);
        } else {
            const double val = jl_unbox_float64(var);
            printf("%f\n", val);
        }
    }
    
    int main(int argc, char *argv[])
    {
        char* result = malloc(sizeof(char) * 1024);
    
        jl_init();
    
        // (void)jl_eval_string("println(sqrt(2.0))"); //works
        (void)SimpleExecute("x = sqrt(2.0)", "x", result);
    
        jl_atexit_hook(0);
        return 0;
    }
    

    您可以通过修改以下内容来运行它:

    cc -I/Users/$USER/Applications/Julia-1.3.app/Contents/Resources/julia/include/julia/ -Wl,-rpath,/Users/$USER/Applications/Julia-1.3.app/Contents/Resources/julia/lib/ -L/Users/$USER/Applications/Julia-1.3.app/Contents/Resources/julia/lib/ -ljulia  main.c -o main
    

    【讨论】:

    • 请不要发布代码图片。只需发布代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多