Как вызвать метод julia, определенный в импортированном пакете из c ++? - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужна библиотека c ++ для вычисления функции полигаммы для сложных аргументов.После некоторого поиска в Google, который привел меня к этому
https://scicomp.stackexchange.com/questions/23194/i-am-searching-for-c-code-of-the-complex-polygamma-function/23195/

, я решил попытаться вызвать библиотеку julia из c ++.Чтобы внедрить Джулию в c ++, я последовал примеру в
встраивание Джулии-Ланга в c .
, где Джулия используется для вычисления sqrt(2).
. Это прекрасно работает ..Как я могу обобщить пример, чтобы работать для моего случая?
Как я могу загрузить внешний пакет как SpecialFunctions в c ++?
Как я могу передать сложные аргументы?

Должен работать как 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: 0xffffffffffffffff)
Распределение: 390564 (Пул: 390440; Большой: 124);GC: 0
[4] 10669 ошибка сегментации (ядро сброшено) ./ggv.run

У вас есть идея или ссылка, которую я могу найти, чтобы ее решить?Заранее спасибо

Федерико

РЕДАКТИРОВАТЬ: После предложения molbdnilo я проверил jl_specialfunction_module ptr и это NULL ptr.Как правильно загрузить модуль Specialfunctions?

...