我正在尝试使用 Matlab 编码器。我编写了一个简单的matlab
脚本并为此生成了 C 代码(以及必要的标头)。matlab 脚本如下所示:
function amin_idx=findminidx(a)%#codegen
amin_idx=find(a==min(a),1,'first');
在 Matlab 编码器中,我启动了一个新项目,将前置条件a
作为10x1
向量并构建项目以生成.c
和.h
文件。我写了一个包含如下的新.c
文件:main()
#include<stdio.h>
#include "rt_nonfinite.h"/*from generated code*/
#include "findminidx.h"/*from generated code*/
void main(void){
double a_data[3]={6,5,4};
int a_size[2]={3,1};
double amin_idx_data[1]={-1};
int amin_idx_size[2]={1,1};
findminidx(a_data,a_size,amin_idx_data,amin_idx_size);/*from generated code*/
printf("\namin_idx = %f\n",amin_idx_data[0]);
}
包含的.c
文件(生成)findminidx()
如下:
/*
* File: findminidx.c
*
* MATLAB Coder version : 2.6
* C/C++ source code generated on : 30-Aug-2014 18:04:42
*/
/* Include files */
#include "rt_nonfinite.h"
#include "findminidx.h"
/* Function Definitions */
/*
* Arguments : const double a_data[]
* const int a_size[2]
* double amin_idx_data[]
* int amin_idx_size[2]
* Return Type : void
*/
void findminidx(const double a_data[], const int a_size[2], double
amin_idx_data[], int amin_idx_size[2])
{
int ixstart;
double mtmp;
int ix;
boolean_T exitg2;
boolean_T x_data[10];
int k;
int ii_data[1];
boolean_T exitg1;
int b_ii_data[1];
ixstart = 1;
mtmp = a_data[0];
if (a_size[1] > 1) {
if (rtIsNaN(a_data[0])) {
ix = 2;
exitg2 = false;
while ((!exitg2) && (ix <= a_size[1])) {
ixstart = ix;
if (!rtIsNaN(a_data[ix - 1])) {
mtmp = a_data[ix - 1];
exitg2 = true;
} else {
ix++;
}
}
}
if (ixstart < a_size[1]) {
while (ixstart + 1 <= a_size[1]) {
if (a_data[ixstart] < mtmp) {
mtmp = a_data[ixstart];
}
ixstart++;
}
}
}
ixstart = a_size[0] * a_size[1];
for (ix = 0; ix < ixstart; ix++) {
x_data[ix] = (a_data[ix] == mtmp);
}
if (1 <= a_size[1]) {
k = 1;
} else {
k = 0;
}
ixstart = 0;
ix = 1;
exitg1 = false;
while ((!exitg1) && (ix <= a_size[1])) {
if (x_data[ix - 1]) {
ixstart = 1;
ii_data[0] = ix;
exitg1 = true;
} else {
ix++;
}
}
if (k == 1) {
if (ixstart == 0) {
k = 0;
}
} else {
if (1 > ixstart) {
ixstart = -1;
} else {
ixstart = 0;
}
ix = 0;
while (ix <= ixstart) {
b_ii_data[0] = ii_data[0];
ix = 1;
}
k = ixstart + 1;
ixstart++;
ix = 0;
while (ix <= ixstart - 1) {
ii_data[0] = b_ii_data[0];
ix = 1;
}
}
amin_idx_size[0] = 1;
amin_idx_size[1] = k;
ixstart = k;
ix = 0;
while (ix <= ixstart - 1) {
amin_idx_data[0] = ii_data[0];
ix = 1;
}
}
/*
* File trailer for findminidx.c
*
* [EOF]
*/
目的是,调用从.c
生成的例程matlab
,传递一个小数组并打印传递数组的最小值的索引。我将包含的 c 文件与包含所有生成的文件main()
的目录放在同一目录中。此外,如上所示,我在 c 文件中包含了相应的头文件。当我尝试使用 编译时,会产生以下错误。matlab
.c
.h
main()
gcc file1.c findminidx.c
未定义对“rtIsNaN”的引用
我不明白这是为什么?我的系统详细信息如下:
- Ubuntu 14.04,64 位
- Matlab R2014a,64 位
- gcc 版本 4.8.2