gpt4 book ai didi

c++ - matlab C 共享库 : capturing matlab function output with mxArray*/mxArray**

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:00 25 4
gpt4 key购买 nike

我正在尝试从 C 代码调用 matlab 函数,尝试遵循我可以通过网络获得的任何信息。我正在使用在 Ubuntu 14.04 上运行的 matlab 版本 R2014a。假设函数 testfun.m 如下所示 --

function c = testfun(a, b)
disp('doing testfun()');
c = a + b ;
disp('done testfun()');
end

现在我调用了 mcc 来制作 c-wrapper --

user@pc:/tmp/test$ mcc -B csharedlib:libtestfun testfun.m -v

然后我有libtestfun.c , libtestfun.hlibtestfun.so 文件,然后我创建了一个调用 testfun() 的 c 文件——

#include <stdio.h>
#include "libtestfun.h"

int main()
{
libtestfunInitialize();

mxArray *a, *b, **c;
double *x ;

a = mxCreateDoubleScalar(4); x = mxGetPr(a);
printf("a = %.1f\n", x[0]);
b = mxCreateDoubleScalar(5); x = mxGetPr(b);
printf("b = %.1f\n", x[0]);

*c = mxCreateDoubleMatrix(1, 1, mxREAL);
mlfTestfun(1, c, a, b);

x = mxGetPr(c[0]);
printf("c = %.1f\n", x[0]);

libtestfunTerminate();
return 1 ;
}

我正在构建可执行文件 --

user@pc:/tmp/test$ mbuild test.c libtestfun.c -L.libtestfun.so -v

事实是函数的签名是这样的

LIB_libtestfun_C_API bool MW_CALL_CONV mlfTestfun(int nargout, mxArray** c, mxArray* a, mxArray* b);

如果您注意到,您会看到输出 c 被声明为 mxArray**,因此我使用的是 mxArray **ctest.c 文件中。

但是当我运行可执行文件时,我只看到 0.0 作为 c 的值,但它应该是 9.0 --

user@pc:/tmp/test$ ./test 
a = 4.0
b = 5.0
c = 0.0

这是怎么回事?

为什么输出总是在函数签名中声明为 mxArray**?为什么我在 testfun.m 中看不到 disp() 函数产生的输出?

我们将不胜感激。

最佳答案

您错误地声明了 c。它也应该是 mxArray*。签名中的双指针是因为它是一个输出。当您编写 *c 时,您正在取消引用未初始化的指针。

您需要以下代码:

#include <stdio.h>
#include "libtestfun.h"

int main()
{
libtestfunInitialize();

mxArray *a;
mxArray *b;
mxArray *c = NULL; // output arg must be initialized to NULL
double *x ;

a = mxCreateDoubleScalar(4); x = mxGetPr(a);
printf("a = %.1f\n", x[0]);
b = mxCreateDoubleScalar(5); x = mxGetPr(b);
printf("b = %.1f\n", x[0]);

if (mlfTestfun(1, &c, a, b))
{
x = mxGetPr(c);
printf("c = %.1f\n", x[0]);
}

libtestfunTerminate();
return 1 ;
}

关于c++ - matlab C 共享库 : capturing matlab function output with mxArray*/mxArray**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31780380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com