即使文件位于-I指定的目录中,也找不到头文件

时间:2015-04-15 13:25:39

标签: c++ matlab makefile simulink

我正在尝试使用Mingw编译Simulink S函数。

我的Makefile包含以下内容:

MINGWPATH=D:/Mingw
MATLABROOT=C:\PROGRA~1\MATLAB\R2014b
CC=$(MINGWPATH)/bin/gcc 
MEXFLAG=-shared -DMATLAB_MEX_FILE -I$(MATLABROOT)\simulink\include -I$(MATLABROOT)\extern\include -Wl,--export-all-symbols $(LIBS) $(MEXSRC) -o $(MEXTGT).mexw64

LIBS= -L$(MATLABROOT)/bin/win64 -L$(MATLABROOT)/extern/lib/win64/microsoft -lmex -lmx -lmwlapack -lmwblas -leng

MEXTGT=SFCN_Block
MEXSRC=SFCN_Block.cpp
all:$(MEXTGT)

$(MEXTGT): $(MEXSRC)
    $(CC) $(MEXFLAG) -ladvapi32 -luser32 -lgdi32 -lkernel32 -lmingwex

SFCN_Block.cpp文件在#include 'simstruc.h'中包含simstruc.hC:\PROGRA~1\MATLAB\R2014b\simulink\include

但是我收到以下错误:

SFCN_Block.cpp:12:22: fatal error: simstruc.h: No such file or directory
 #include "simstruc.h"
                      ^

怎么可能出错?

(我的Matlab版本是Windows 7下的R2014b(64位),我正在尝试使用Mingw编译。我的Makefile基于this question上接受的答案。)

2 个答案:

答案 0 :(得分:0)

将Makefile的第一行更改为:

MINGWPATH=D:/Mingw
MATLABROOT="C:\Program Files\MATLAB\R2014b"
SIMULINK_INCLUDE_PATH=$(MATLABROOT)/simulink/include
MATLAB_EXTERN_INCLUDE_PATH=$(MATLABROOT)/extern/include
CC=$(MINGWPATH)/bin/gcc 
MEXFLAG=-shared -DMATLAB_MEX_FILE -IBlocks -IDesignPatterns -ILogging -I$(SIMULINK_INCLUDE_PATH) -I$(MATLAB_EXTERN_INCLUDE_PATH) -Wl,--export-all-symbols $(LIBS) $(MEXSRC) -o $(MEXTGT).mexw64

解决No such file or directory错误。任何人都可以解释原因吗?

现在我收到以下错误:

C:\Program Files\MATLAB\R2014b/bin/win64/libmex.dll: file not recognized: File format not recognized

但这是另一个问题。

答案 1 :(得分:-1)

以下是遇到的一些类似问题:http://www.mathworks.com/matlabcentral/newsreader/view_thread/150266

问题(来自上面的链接):

  

我正在使用S-Function Builder将文件读入我的simulink模型。一世   继承了另一个开发人员的代码和模型。我必须   每次我想要更改文件名时重建S-Function。所以   据我所知,它今天停止工作,没有理由   任何。当我按下构建按钮时,我得到了一些东西   “链接器错误1083.没有这样的文件或目录”的影响simstruc.h“   现在,每个模型中的每个S-function Builder都会失败   错误。我搜索了simstruc.h并在几个中找到了它   matlab路径中的目录。我在想MEX链接器或   编译器或者由于某种原因现在构建S函数的任何东西   不知道在哪里寻找simstruc.h,也许它的路径是   不知何故腐败了?

回答(来自同一个链接):

  

您好,   这是修复,您可以从r2010a发布的rFC10b中覆盖以下文件

     
      
  • C:\ Program Files \ MATLAB \ R2010b \ bin \ mex.bat

  •   
  • C:\ Program Files \ MATLAB \ R2010b \ bin \ mex.pl

  •   
  • C:\ Program Files \ MATLAB \ R2010b \ bin \ mexext.bat

  •   
  • C:\ Program Files \ MATLAB \ R2010b \ bin \ mexsetup.pm

  •   
  • C:\ Program Files \ MATLAB \ R2010b \ bin \ mexutils.pm

  •   
     

我不确定哪个是问题文件,但它以这种方式工作。