【问题标题】:Embedding Julia in C++在 C++ 中嵌入 Julia
【发布时间】:2019-04-09 21:15:40
【问题描述】:

我尝试按照文档 (https://docs.julialang.org/en/v1/manual/embedding/index.html) 中的说明嵌入 Julia,但无法使其与字符一起使用。我可能错过了一些基本的东西。

当我运行以下代码时

jl_function_t *func = jl_get_function(jl_base_module, "uppercase");
char const *julia = "julia";
jl_value_t *argument = jl_box_char(*julia);
jl_value_t *ret = jl_call1(func, argument);
const char *unboxed = jl_string_ptr(ret);
// expecting "JULIA", getting an empty string

未装箱的变量返回为空。 jl_box_char 似乎需要一个指针,因为它的参数必须是 uint32_t (https://github.com/JuliaLang/julia/blob/24f1316e91de029f71f636db23aced49156b44ad/src/julia.h#L1182)。

请注意,调用时字符已正确拆箱:

jl_value_t *ret = jl_eval_string("uppercase(\"julia\")");
const char *unboxed = jl_string_ptr(ret);

有什么想法吗?谢谢。

【问题讨论】:

  • *julia不是指针。 jl_box_char"boxes" 一个字符。如果它需要一个指针,它的参数将是一个指针,而不是一个整数。你想要jl_cstr_to_string
  • 感谢@molbdnilo,就是这样。行 jl_value_t *argument = jl_box_char(*julia);只需替换为 jl_value_t *argument2 = jl_cstr_to_string(julia);

标签: c++ char julia embed


【解决方案1】:

@molbdnilo 找到的答案。以下作品:

jl_function_t *func = jl_get_function(jl_base_module, "uppercase");
char const *julia = "julia";
jl_value_t *argument = jl_cstr_to_string(julia);
jl_value_t *ret = jl_call1(func, argument);    
const char *unboxed = jl_string_ptr(ret); // expecting "JULIA", getting "JULIA"

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2017-11-10
    • 2019-05-13
    • 2012-01-23
    • 2012-04-23
    相关资源
    最近更新 更多