我想我的手用Matlab编码器。 我写了一个简单matlab
脚本,并生成相同的C代码(有必要的标头一起)。 在MATLAB脚本如下所示:
function amin_idx=findminidx(a)%#codegen
amin_idx=find(a==min(a),1,'first');
在Matlab的编码器,我开始一个新项目,前置条件a
为10x1
载体,并建立了项目产生的.c
和.h
文件。 该I写一个新.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()
在同一个目录中包含所有一个matlab
产生.c
和.h
文件。 另外,我包括在相应的集管main()
C文件如上面可以看出。 当我尝试使用编译gcc file1.c findminidx.c
,它产生以下错误。
未定义的参考`rtIsNaN”
我不明白这是为什么? 我的系统详细信息如下:
- Ubuntu的14.04,64位
- Matlab的R2014a中,64位
- gcc版本4.8.2