如何调用从 C++ 导入的包中定义的 julia 方法?

2023-12-19

我需要一个 C++ 库来计算复杂参数的多伽玛函数。经过一番谷歌搜索后我发现了这一点
https://scicomp.stackexchange.com/questions/23194/i-am-searching-for-c-code-of-the-complex-polygamma-function/23195/ https://scicomp.stackexchange.com/questions/23194/i-am-searching-for-c-code-of-the-complex-polygamma-function/23195/

我决定尝试从 C++ 调用 Julia 库。 为了将 julia 嵌入到 c++ 中,我遵循了以下示例
Julia-lang 嵌入到 c 中 https://docs.julialang.org/en/latest/manual/embedding/.
其中 Julia 用于计算sqrt(2).
这很好......我如何概括该示例以适用于我的案例?
如何在 C++ 中将外部包加载为 SpecialFunctions?
如何传递复杂的参数?

它应该作为polygamma( int n , complex<double> z )。 这是我尝试过的(目前仅考虑真实的论据)

#include <julia.h>
JULIA_DEFINE_FAST_TLS() 

jl_module_t* jl_specialfunctions_module = (jl_module_t*) jl_get_binding(jl_main_module, jl_symbol("SpecialFunctions"));
jl_function_t* func2 = jl_get_function(jl_specialfunctions_module,"polygamma");
jl_value_t *argument1 = jl_box_int64(1);
jl_value_t *argument2 = jl_box_float64(2.0);
jl_value_t *arguments[2] = { argument1 , argument2 };
jl_value_t *ret = jl_call(func2, arguments, 2);
if (jl_typeis(ret, jl_float64_type)) {
double ret_unboxed = jl_unbox_float64(ret);
cout << "julia = " << ret_unboxed << endl;
}
else {
printf("ERROR: unexpected return type from sqrt(::Float64)\n");
}
jl_atexit_hook(0);

代码可以编译但给出 Segmentation Failure 错误

在从无文件开始的表达式中:0
ptrhash_get 位于 /buildworker/worker/package_linux64/build/src/support/ptrhash.c:26 未知功能(ip:0xffffffffffffffff)
分配:390564(池:390440;大:12​​4); GC:0
[4] 10669 分段错误(核心转储)./ggv.run

你有什么想法或参考我可以查找来解决这个问题吗?

编辑: 后莫布德尼洛建议我检查了jl_specialfunction_moduleptr 并且它是 NULL ptr。 我应该如何正确加载特殊功能模块?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调用从 C++ 导入的包中定义的 julia 方法? 的相关文章

随机推荐