我想在Linux中创建将由MATLAB加载和使用的共享库 . 这是一个简单的例子:
#include "my_code.h"
void multiply_vector(double *x, double b, int N, double* y)
{
for (int i=0;i<N;i++)
y[i]=b*x[i];
}
在头文件中,我只是声明函数 . 然后用CMake创建共享库 .
add_library(my_library SHARED my_code.cpp)
install(TARGETS my_library LIBRARY DESTINATION .)
但是,当我在MATLAB中加载这个库时,使用:
loadlibrary('libmy_library.so','my_code.h')
警告:“在loadlibrary(第431行)的库中找不到函数'multiply_vector'” . 实际上,当我尝试使用“nm -D”命令检查共享库的内容时,我会更改该函数名称并查看以下行:
0000000000000810 T _Z15multiply_vectorPddiS_
为什么会这样?如何才能获得库函数的良好名称,以便MATLAB可以调用它?谢谢!
1 回答
默认情况下,名称在C中被修改 . 为了避免它,您需要将函数声明为
extern "C"
. 只需在函数定义之前添加以下行:extern "C"
的作用是告诉编译器不要破坏名称 . 因此,它将生成multiply_vector
而不是_Z15multiply_vectorPddiS_
,而MATLAB将能够找到它 .