我正在用Matlab編碼器試試我的雙手。我編寫了一個簡單的matlab
腳本,並生成了相同的C代碼(以及必要的頭文件)。該MATLAB程序是這樣的:未定義的引用'rtIsNaN'
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
生成,傳遞一個小數組並打印傳遞數組的最小值的索引。我將包含main()
的c文件放在與包含所有matlab
生成的.c
和.h
文件相同的目錄中。另外,如上所示,我在main()
c文件中包含了相應的頭文件。當我嘗試使用gcc file1.c findminidx.c
進行編譯時,會產生以下錯誤。
未定義的參考`rtIsNaN」
我不明白這是爲什麼?我的系統詳細信息如下:
- 的Ubuntu 14.04,64位
- Matlab的R2014a,64位
- gcc版本4.8.2
「當我嘗試編譯...」時 - 您應該編輯您的問題,以確切指示您如何編譯,包括所有標誌。 – horchler 2014-08-30 22:27:56
@horchler完成。 – Abhinav 2014-08-30 22:31:46
是否有你在main.c中包含''rt_nonfinite.h''的原因?編碼器輸出了'rt_nonfinite.h'嗎?其中是否定義了「rtIsNaN」? – horchler 2014-08-30 22:33:53