matlab 动态库 二次调用,LINUX matlab编译动态库调用崩溃
這是我的.m文件,很簡單,即返回兩個數的和。
function [ z ] = myadd( x,y )
%UNTITLED Summary of this function goes here
%? ?Detailed explanation goes here
z=x+y;
end
我用這條語編譯生成.so。
mcc -W cpplib:libmyadd -T link:lib myadd.m
下面是我的C++代碼
#include "libmyadd.h"
#include
#include "mclcppclass.h"
#include
#include
#include
#define lpath "/home/matlab/test/add.log"
void * testll(void *arg);
int main()
{
sleep(10*60);
pthread_t ThreadId=0;
pthread_create(&ThreadId, NULL, testll,NULL);
while(1)
{
sleep(6);
}
return 0;
}
void * testll(void *arg)
{
pthread_detach(pthread_self());
double a=10.23,b=19.23;
double sumc=0;
int nargout = 1;
for(;;)
{
try{
libmyaddInitialize();
mwArray sum(1,1,mxDOUBLE_CLASS);
mwArray c1(1,1,mxDOUBLE_CLASS);
mwArray c2(1,1,mxDOUBLE_CLASS);
c1(1,1).SetData(&a,1);
c2(1,1).SetData(&b,1);
myadd(nargout,sum,c1,c2);
sum(1,1).GetData(&sumc,1);
//printf("%.4f\n",sumc);
char cmd[1024];
memset(&cmd,0,sizeof(cmd));
sprintf(cmd,"echo sumc=%.4f >>%s",sumc,lpath);
printf("%s\n",cmd);
system(cmd);
libmyaddTerminate();
}catch(...)
{
char cmd[1024];
memset(cmd,0,sizeof(cmd));
sprintf(cmd,"echo core...... >> %s\n",lpath);
system(cmd);
}
sleep(2);
}
}
為了方便查閱問題,我將X+Y的結果值打印到add.log日志文件中,首次執行我的文件 ,調用MATLAB的SO沒有問題,結果也能正常打印,每次當我重起機子之后,我將這個可執行文件放在/ETC/RC。LOCAL目錄下,讓他后臺運行,隨機啟動,可每次都直接進入CATCH中,意思就是崩潰,之前我想是因為LINUX剛啟動,也許還有些插件之類沒加載完,我就將程序延時10分鐘再執行,可還是一樣的結果,直接崩潰,這問題已經困擾我一周了,希望遇到的大家給想想辦法 ,謝謝大家了。
總結
以上是生活随笔為你收集整理的matlab 动态库 二次调用,LINUX matlab编译动态库调用崩溃的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为 MateBook E GO 202
- 下一篇: linux赋权限命令chmod给其他用户