QT调用MatLab生成的DLL库,及错误总结(科研配置环境系列)

参考这篇文章:Qt调用MATLAB 生成的dll经验分享_ubuntu中qt调用matlab的库文获取返回值-CSDN博客

调用matlab生成的DLL库,要注意的是,需要将生成的三个文件:.dll,.h和.lib复制到QT的


其中,CUDA_Cario是我创建的QT项目名称。

        然后,一般情况下,程序应该就能正常运行了。但是,在不一般的时候,程序运行不了,比如,我这个程序是运行在多线程之中的,各个线程对时间的把控要求严格(我自己代码写的辣鸡导致的)。

        因此,因为启动matlab生成的DLL库所需要的时间太长,导致,各个线程协调不一,无法运行。这不是最坑的,最坑的是,在QT(我的是QT6版本的creater QT 5的编译环境)在应用程序输出控制窗口,总是弹出消息:Invalid parameter passed to C runtime function.导致我一直以为是自己的环境有问题(因为之前编译器的关系,确实发生过环境的问题,后来解决了,居然还弹出来这个消息,我就以为环境没有搭建完毕)。所以,可以忽略这条消息不用理会。

在Ubuntu系统中,将MATLAB生成DLL(动态链接)用于Qt应用程序通常需要以下几个步骤: 1. **安装依赖**: - 首先确保已经安装了MATLAB R20XX版本及其产生的 mex文件(.mexa64或.mexw64),因为Qt项目默认针对的是64位Linux。 - 安装libstdc++和libgcc-dev等开发工具包,这对于动态链接非常重要。 2. **MATLAB Mex文件**: - 使用MATLAB编写MEX函数,并通过`mex -setup`命令配置MATLAB与系统的链接路径,以便能找到所需的。 3. **构建MATLAB DLL**: - 编译MATLAB MEX函数生成DLL文件,确保它可以在Linux上运行。MATLAB可能会提供特定于平台的编译指南。 4. **复制到Qt目录**: - 将MATLAB生成DLL放到Qt项目的适当位置,比如`./lib`或`./plugins`目录下,这取决于您的应用如何组织插件。 5. **Qt中使用DLL**: - 在Qt中,可以通过QLibrary或QLibraryInfo加载DLL。例如: ```cpp QLibrary lib("path_to_your_dll"); void* func = lib.resolve("function_name"); // 函数名 if (func) { // 调用函数 (*reinterpret_cast<void(*)()>(func))(); } else { qCritical("Function not found in the library."); } ``` 或者在头文件中包含并在构造函数中加载: ```cpp class MyClass : public QObject { Q_OBJECT public: explicit MyClass(QLibrary *lib, QObject *parent = nullptr) : QObject(parent), myLib(lib) { if (!myLib.load("path_to_your_dll")) { qCritical("Failed to load MATLAB DLL."); } // 然后你可以像下面一样使用函数 myFunc(); } private slots: void myFunc() { void(*myFuncPointer)(); myFuncPointer = (void(*)())myLib.resolve("function_name"); if (myFuncPointer) { (*myFuncPointer)(); } } private: QLibrary *myLib; }; ``` 6. **处理错误**: - 当加载或调用DLL中的函数时,一定要注意异常处理,因为跨语言交互可能出现错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值