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

时间:2019-02-12 09:47:48

标签: c++ math julia

我需要一个c ++库来为复杂参数计算polygamma函数。经过一番谷歌搜索,使我想到了
 https://scicomp.stackexchange.com/questions/23194/i-am-searching-for-c-code-of-the-complex-polygamma-function/23195/

我决定尝试从c ++调用julia库。 为了将julia嵌入到c ++中,我遵循了
上的示例 julia-lang embedding into c
使用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);

代码可以编译,但会出现细分错误

以无文件开头的表达式:0
ptrhash_get在/buildworker/worker/package_linux64/build/src/support/ptrhash.c:26 功能未知(ip:0xffffffffffffffffff)
分配:390564(池:390440;大:124); GC:0
[4] 10669分段错误(核心已转储)./ggv.run

您对我有什么想法或参考可以解决吗? 预先感谢

Federico

编辑: 在 molbdnilo 建议之后,我检查了jl_specialfunction_module ptr,它是一个NULL ptr。 我应该如何正确加载Specialfunctions模块?

0 个答案:

没有答案