以下内容纯属我个人在这初用matlab期间遇到的一些问题,和我所用的解决方式。
事情是这样的:
一开始安装好了matlab,用于跑图像处理的一篇论文的代码。
根据本地项目的路径,配置好了相应的文件路径。如下图。
然后我就开始运行该项目。
发现报错了,问题提示是一连串的报错。
我先检查了从配置路径获取到的文件的值是否正确,如下图。
发现没有问题以后,才发现是某个函数执行有问题,从这个函数继续往深处挖,通过多次的函数调用,最终找到了是某个函数显示未定义问题。我在这整个项目里翻了一遍,最终发现这个函数是一个mex文件(即.c文件编译后,用于matlab的文件格式)。可是在这个文件夹当中,明明已经有了mex文件(如下图红框所示),也就是说我所运行的这个.m文件应该是能够直接调用的才对。
通过一番百度,我一开始以为是我的matlab没有安装gcc这样能够编译.c文件的编译器。(通过在命令行输入mex -setup,提示未安装相应的编译器),于是我根据提示去安装了一个【MinGW-64 C/C++】,编译器安装完了以后,发现!还是报函数未定义的错。。。于是乎继续百度。。知道我偶然(把报错的部分一部分一部分地拿去百度。。。)看到了这么一个解决方案,这个人遇到的问题是Link error问题,如下图。
然后有人提出说用这三种方法去解决。我就一个一个试了一下,直到!我试到第三个方法,把之前那些.c文件重新用编译器编译了一遍,竟然!生成了一个跟原有的mex文件奇像无比的mex文件。。。就差了一个字符,如下图。然后我就把所有的.c文件全部重新编译了一遍,发现代码终于能跑通了!
写到这里,总结一下:
如果是跑别人的代码,发现有别人自己写的函数,在你这里发生了函数未定义这种问题,
第一检查函数文件路径,确保你的编译器在运行过程中,自动搜索函数的时候能够覆盖到相应的函数位置。
第二确保函数编译生成的可执行文件,是适用于你的编程环境的。(最好自己再把函数文件全部编译一遍,保险)