从 emxArray_uint8_T 检测到错误:.text+0xc1):未定义对 `emxInit_uint8_T1(emxArray_uint8_T**, int)' 的引用?
Posted
技术标签:
【中文标题】从 emxArray_uint8_T 检测到错误:.text+0xc1):未定义对 `emxInit_uint8_T1(emxArray_uint8_T**, int)\' 的引用?【英文标题】:Error detected from emxArray_uint8_T: .text+0xc1): undefined reference to `emxInit_uint8_T1(emxArray_uint8_T**, int)'?从 emxArray_uint8_T 检测到错误:.text+0xc1):未定义对 `emxInit_uint8_T1(emxArray_uint8_T**, int)' 的引用? 【发布时间】:2018-05-06 18:43:05 【问题描述】:我写了一个计算灰度图像熵的matlab函数:“score=score_entropy(image)”然后使用matlab coder将其转换为c++
c++代码:
#include "mex.h"
#include "math.h"
#include "score_entropy.cpp"
#include"score_entropy_emxAPI.cpp"
class image
public:
unsigned char *im;
int h1,w1;
voide scoreimage();
void image::scoreimage( )
emxArray_uint8_T* I=emxCreateWrapper_uint8_T(im,h1,w1);
double ent=score_entropy(I);
emxDestroyArray_uint8_T(I);
void mexFunction( int nl, mxArray *pl[], int nr, const mxArray *pr[] )
image.im = ( unsigned char*) mxGetData(pr[0]);
image. h1 = (int) imgSize[0];
image. w1 = (int) imgSize[1];
image.scoreimage();
score_entropy.cpp 的定义: 双分数熵(const emxArray_uint8_T *im)
我发现了一个错误列表:
(.text+0xc1): undefined reference to `emxInit_uint8_T1(emxArray_uint8_T**, int)'
(.text+0xfb): undefined reference to `emxEnsureCapacity_uint8_T(emxArray_uint8_T*, int)'
(.text+0x16c):undefined reference to `emxInit_uint8_T(emxArray_uint8_T**, int)'
..
..
(.rdata$.refptr.rtMinusInf[.refptr.rtMinusInf]+0x0):
undefined reference to `rtMinusInf'
collect2.exe: error: ld returned 1 exit status
任何人都可以帮助更正此代码吗?
【问题讨论】:
【参考方案1】:编译并链接所有生成的 CPP 文件,这将解决链接器问题。您似乎只是在链接其中的几个。
还要确保在调用生成的入口点之前调用生成的 _initialize
函数。
【讨论】:
我在调用入口点之前调用了 score_entropy_initialize(),但仍然有相同的错误加上 (.text+0x107c):未定义对 `score_entropy_initialize()' 的引用。我还能做什么以及如何链接所有文件。以上是关于从 emxArray_uint8_T 检测到错误:.text+0xc1):未定义对 `emxInit_uint8_T1(emxArray_uint8_T**, int)' 的引用?的主要内容,如果未能解决你的问题,请参考以下文章
从 uint8_t* 到 uint32_t 的无效转换 - 从 32 位架构迁移到 64 位架构时?
将 Google AdMob SDK 从 7.7.0 更新到 7.8.0 未定义符号错误