问题链接Matlab生成的C++ Libary

问题描述:

我想使用从我的C++代码中的Matlab C/C++编码器生成的代码。
Matlab以正确的方式创建文件,并为其创建一个Makefile,以创建一个Libary。我想,我链接的Libary在我的Makefile正确的方式,但它仍然抛出Error:问题链接Matlab生成的C++ Libary

/HOMES/~~/testMatlab/main.cpp:11: undefined reference to `emxCreate_real_T(int, int)'

main.cpp中:

1 #include<iostream> 
2 #include"libMat.h" 
3 
4 using namespace std; 
5 
6 int main() { 
7 double iHeightAll = 100; 
8 double iWidthAll = 100; 
9 
10 emxArray_real_T *MatlabInput; 
11 MatlabInput = emxCreate_real_T((int)iHeightAll,(int)iWidthAll); 
12 return 0; 
13 } 

libMat.h

#ifndef __LIBMAT_H__ 
#define __LIBMAT_H__ 
/* Include files */ 
#include <stddef.h> 
#include <stdlib.h> 

#include "rtwtypes.h" 
#include "libMat_types.h" 

/* Function Declarations */ 
extern emxArray_real_T *emxCreateND_real_T(int numDimensions, int *size); 
extern emxArray_real_T *emxCreateWrapperND_real_T(double *data, int numDimensions, int *size); 
extern emxArray_real_T *emxCreateWrapper_real_T(double *data, int rows, int cols); 
extern emxArray_real_T *emxCreate_real_T(int rows, int cols); 
extern void emxDestroyArray_real_T(emxArray_real_T *emxArray); 
extern double libMat(const emxArray_real_T *Pic, double height, double width); 
extern void libMat_initialize(); 
extern void libMat_terminate(); 
#endif 

的Makefile :

1 CC=g++ 
2 CFLAGS= -g 
3 OBJECTS= main.o 
4 LIBS = -Llibs -lMat 
5 
6 # --- targets 
7 all: main 
8 main: $(OBJECTS) 
9   $(CC) $(LIBS) -o main $(OBJECTS) 
10   
11 main.o: main.cpp 
12   $(CC) $(CFLAGS) -Ilibs -c main.cpp 
13 

该Libary位于/ li bs,称为libMat.a。所以这应该都是正确的

我一定要调用的函数以任何其他方式,因为他们的extern? libMat.h文件当然是在链接Libary中编译的libMat.cpp中实现的。但我无法更改由Matlab生成的代码(libMat等)

32/64位素材的问题很可能被排除,因为我在同一台机器上构建了Libary,因为我构建了自己的项目。

可你们谁给我一个提示什么是错的?

+0

我会尝试重用您的$(LIBS)您的main.o规则 $(CC)$(CFLAGS)-Ilibs $(LIBS)-c main.cpp – johnkork 2014-12-09 12:59:08

+0

这将产生相同的结果。错误发生在 g ++ -Llibs -lMat -o main main.o – 2014-12-09 16:29:33

让它

main: $(OBJECTS) 
    $(CC) -o main $(OBJECTS) $(LIBS) # LIBS at the end 

这是ld和静态库一件有趣的事:只选取那些.o文件指出,它认为它需要在连接过程阶段.a的。如果后面的对象(在这种情况下为main.o)引入了新的依赖关系,它就不会在早期的库中寻找它们。

+0

哇...解决了它! 非常感谢你=) – 2014-12-09 17:36:49