为什么在Simulink中发布的模型或在Accelerator模式中运行的模型的构建过程失败?金宝app

252次浏览(过去30天)
当我尝试构建一个内置演示时,我得到一个错误消息,说明构建已经失败。我有一个支持的编译金宝app器安装和正确设置。
错误消息将类似于以下内容:
NMAKE: fatal error U1073: don't know how to make 'C:\Program'
停止
make命令返回的错误值为2
' an_error_occurs _during_the_call_to_make'不能被识别为内部或外部命令,
可操作的程序或批处理文件。
在加速器模式下运行的模型的构建日志中可能会出现类似的错误。

接受的答案

MathWorks支金宝app持团队
编辑:MathWorks支金宝app持团队 2018年6月15日
生成过程的问题是由于“model.mk”生成文件中的以下行造成的。该.mk文件包含以下代码:
MATLAB\u ROOT=C:\Program Files\MATLAB\R2013a
ALT_MATLAB_ROOT = C:\Program Files\MATLAB\R2013a
MATLAB_BIN = C:\Program Files\MATLAB\R2013a\bin
ALT\u MATLAB\u BIN=C:\Program Files\MATLAB\R2013a\BIN
因为MATLAB_ROOT和ALT_MATLAB_ROOT变量具有相同的值,所以makefile使用了带空格的MATLAB_ROOT值。构建过程不知道如何处理路径中有空格的文件。MATLAB通常用短路径名填充ALT_MATLAB_ROOT,通常是“C:\ programa ~1”。但是,在某些Windows系统上可能禁用生成短路径名。同样,如果MATLAB本身安装在一个带有空格的路径中(如C:\Program Files),在R2015a SP1更新和后续版本中,这个问题被修复,不会发生。
正确的代码应该如下所示:
MATLAB\u ROOT=C:\Program Files\MATLAB\R2013a
ALT_MATLAB_ROOT = C: \ \ MATLAB \ R2013a PROGRA ~ 1
MATLAB_BIN = C:\Program Files\MATLAB\R2013a\bin
MATLAB ALT_MATLAB_BIN = C: \ PROGRA ~ 1 \ \ R2013a \ bin
有几种方法可以解决这个问题。
  • 解决方案1 -使用Windows短名称:
这可能是最简单的解决方案。金宝搏官方网站在Windows注册表中有一个设置可以启用/禁用为文件路径生成短名称。请使用以下步骤更改此设置:
(注意:由于Program Files文件夹上的Windows安全设置,此方法可能不起作用。如果在步骤4中收到一条消息,上面写着“错误:访问被拒绝”。请使用其他解决方案之一。)金宝搏官方网站
1.转到Windows开始菜单,搜索“regedit.exe”。将打开一个新窗口。
2.导航到以下位置:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ \文件系统\ NtfsDisable8dot3NameCreation控制
3.将“NtfsDisable8dot3NameCreation”的值修改为0。
将该值更改为0将允许在Windows路径中使用短名称。更多信息可以在微软的网站上找到:
4.但是,更改上面的值只会设置更改后创建的短名称文件和文件夹。设置在Windows命令提示符中使用“fsutil”函数的简短名称。设置短名称的语法如下:
> fsutil文件短setshortname <文件名> < >
对于“C:\Program Files”示例,用户将发出以下命令,将“Program Files”的短名称设置为“PROGRA~1”。
> fsutil文件设置ShortName“C:\Program Files”程序1
目录需要用引号括起来,因为它有空格。
5.要检查短名称是否被正确设置,使用"dir"命令和"/x"选项来显示短名称。
> dir C:\ /x
更多关于“fsutil”的信息可以在这里找到:
  • 解决方案2 -创建MATLAB安装文件夹的符号链接:
1.打开Windows命令提示符。然后进入C:目录。
2.创建指向MATLAB版本安装位置的符号链接。语法如下:
> mklink /d <目标>
例如,典型的MATLAB安装文件夹是C:\Program Files\MATLAB。要链接到名为MyMatlab的文件夹,请使用以下命令:
> mklink /d C:MyMatlab“C: \ Program Files \ MATLAB”
如果您打开新的MyMatlab文件夹,您应该会看到安装的每个MATLAB版本的文件夹。
3.为MATLAB创建一个新的快捷方式。它可以放在你的桌面上,也可以放在你想放的任何地方。
4.右键单击快捷方式并打开属性。
5.转到“快捷方式”选项卡。在'Target:'选项中将有一个可执行文件的路径,用于从这个快捷方式启动MATLAB。修改此路径以使用新创建的符号链接。对于上面的例子,应该是这样的
C: \ MyMatlab \ R2013a \ bin \ matlab.exe
6.从此快捷方式启动MATLAB。通过在命令窗口中键入“matlabroot”而不带引号来验证位置,现在应该没有空格了。
7.如果您有多个版本的MATLAB,请对每个版本重复步骤3-6,以便从路径中没有空格的位置启动。
这个解决方案将适用于新创建的快捷方式。如果你从不同的位置启动MATLAB,它将不会使用符号链接,路径中的空格也会有同样的问题。
  • 解决方案3 -改变MATLAB安装文件夹:
我们使用短路径的原因是为了避免路径中的空白。通过在路径中没有任何空格的位置重新安装MATLAB,可以解决构建问题。然而,这将要求您下载并重新安装MATLAB。
例如,MATLAB可以安装在如下路径
C:\MATLAB\U安装\MATLAB\R2013a
与解决方案2非常相似,此解决方案将要求您为所使用的所有版本重新安装MATLAB。
  • 解决方案4 -修改模板生成文件
解决此问题的另一种方法是将文件名用双引号括起来。这将导致生成过程按字面意义处理包含在双引号中的文件名,这将导致生成成功。
为此,打开用于代码生成的模板makefile。复制这个文件并重命名它。在这个文件中,无论“$(MATLAB_ROOT)”用作路径的一部分,在“$”符号之前和路径的最后一个字符之后加双引号。例如,如果TMF中的原始行是:
{$工具箱(MATLAB_ROOT) \ \ rtw \ \ xpc目标\ \制造\目标xpcblocks} . c。obj:
该线路将替换为:
{“美元(MATLAB_ROOT) \工具箱\ rtw_targets \ xpc目标\ \制造\ xpcblocks”}.c.obj:
在“Configuration Parameters”->“Code Generation”中,确保“Template makefile”选项指向修改过的TMF,否则更改将不会反映在生成的代码中。
对于所使用的每个模板生成文件,都需要重复此方法。
关于MATLAB R2017a的一个有用的文档页,讨论了如何为带有空格的文件夹名启用构建过程的方法,可以在以下链接中找到:
在“Windows上的构建过程文件夹支持”一节中提到的限制在上面提到的方法中得到了解决。金宝app
8评论
卡雷尔Viaene
卡雷尔Viaene 2020年12月15日
你好,
我以前遇到过这个问题,使用SOLUTION 2帮助我从simulink模型构建了一个. dll。金宝app
在后来的一个项目中,我又经历了同样的问题,但解决方案2没有奏效,也重新安装matlab在没有空间的路径上没有帮助。奇怪的是,我可以使用matlab 2019a构建,但不能使用matlab 2020b或2021b。
同样,使用mex -setup更改编译器也没有帮助。我尝试了mingw, Microsoft Visual c++ 2015 (C), Microsoft Visual c++ 2017 (C)和Microsoft Visual c++ 2019 (C)。
最后,问题是我的构建文件夹位于F:\驱动器上,而Matlab和微软Visual C++ 2017(C)安装在C:\DROW驱动器上。
在移动模型文件到C:\驱动器上的一个文件夹后,构建成功了。
基米-雷克南,
布莱希特

登录评论。

更多的答案(4)


praveen mirajkar
praveen mirajkar 2017年9月4日
你好,我下面得到的错误
C: / ProgramData / MAT金宝appLAB / SupportPackages / R2017a /工具箱/目标/ SupportPackages armcortexmbase / cmsis_rtos_rtx / src / mw_signal.c gmake: C:/ProgramData/MATLAB/SupportPackages/R2017a/too金宝applbox/target/ SupportPackages/ freedomk64f/src/ksdk_armgcc_lib/bm/libksdk_platform. conf . conf . conf . conf . conf . conf . conf . conf . conf . conf . conf。A ',被'. ./untitled.elf'需要。停止。旅客:\ MATLAB程序文件\ \ R2017a \ untitled_ert_rtw >回声make命令返回一个错误2 2 G的使命令返回一个错误:\ MATLAB程序文件\ \ R2017a \ untitled_ert_rtw > An_error_occurred_during_the_call_to_make An_error_occurred_during_the_call_to_make”没有被识别为内部或外部命令,可操作的程序或批处理文件。
我已经尝试了所有的解决方法,还金宝搏官方网站是不能解决这个问题,有人能帮我吗?

哈立德
哈立德 2016年4月7日
你好,
我使用Matlab 2015b和Matlab 2012b。我尝试了第二个解决方案,但它只适用于Matlab 2012B。我不知道如何用Matlab 2015b修复它。还有其他解决办法吗?
谢谢

萨莱Selvam V
萨莱Selvam V 2016年9月20日
亲爱的朋友们,我感谢Mathworks支持团队为回答这些问题所做的努力。金宝app但就我的知识和经验而言,答案似乎与实际情况相差无几。我面临同样的问题与同样的错误消息,但我确实纠正它非常简单,不是通过任何方法提到这里。
修正前的情景:
我已将我的文件(m文件和包装器c文件)存储在一个文件夹中,即:
D: \ \ MATLAB&C \ MATLAB2C \研究CODEGEN \ TutorialToMATLAB2C \ CODERAND
这就是问题所在:文件夹名为:“MATLAB&C”和“MATLAB2C”以及TutorialToMATLAB2C”。
我将文件夹名称更改为:
D: \ \ MATLABAndC \ MATLABToC \研究CODEGEN \ TutorialToMATLABToC \ CODERAND
这就解决了问题。
我的文件:
1) m文件:coderand.m
函数r = coderand ()% # codegen
%指令%#codegen表示函数
%用于代码生成
r = rand ();
2) C包装文件:main.c
/*
* * c
*/
#包括
#包括
#包括“coderand.h”
#包括“coderand_initialize.h”
#包括“coderand_terminate.h”
intmain ()
{
coderand_initialize ();
printf (“coderand=%g\n”coderand ());
coderand_terminate ();
返回0;
}
3) m脚本文件:cccoderand.m
cfg=coder.config(exe”);
cfg。CustomSource =“c”;
cfg.CustomInclude='D:\Research\MATLABAndC\MATLABToC\CODEGEN\TutorialToMATLABToC\CODERAND';
codegen配置cfg coderand;
这就是朋友。谢谢。

标签

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!

翻译的