嵌入julia时使用了调用ccall的函数,这引发了一个问题。

我想在C++中嵌入julia,我希望能获得一个jl_value_t*,它通过ccall来生成。

这表现在C++代码上为:

const char* f_define = "c(du, u, p, t) = ccall(:Robertson_System, Cvoid, (Ptr{Cdouble}, Ptr{Cdouble}, Cdouble), du, u, t)";
jl_value_t* f = jl_eval_string(f_define);

这里Robertson_System是在C++中已写好编译并成功链接的函数。对于我完整程序的测试表现出该语句有问题。然而,如果在julia中直接获得函数对象则没有问题,julia代码如下:

f = c(du, u, p, t) = ccall(:Robertson_System, Cvoid, (Ptr{Cdouble}, Ptr{Cdouble}, Cdouble), du, u, t);

这行代码成功获得了我想要的函数句柄。

我想知道C++中这段代码失败的原因,并且我应如何解决这个问题。

另外,添加正确的库地址后仍然失败。

看看你能不能简化你的示例,并提供最简的、可复现的完整示例。
不然大家没办法调试,只能猜。

你可以试试从 C++ 中 jl_eval_string 简化版本的函数。可以逐个去除函数参数,看看是哪个参数传递的不对。如果到无参函数还是有问题,那么可能是库的加载出了问题。

已经解决。若ccall中使用库路径,地址中不应使用"\“而应用”/"