日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

matlab 动态库 二次调用,LINUX matlab编译动态库调用崩溃

發布時間:2023/12/15 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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编译动态库调用崩溃的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。