我知道关于这个问题存在多个问题,但它们没有帮助。 在尝试编译时,无论如何,我一直得到同样的错误:
arm-none-eabi-gcc.exe: error: CreateProcess: No such file or directory
我想这意味着它无法找到编译器。 我试过调整路径设置
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\nxp\LPCXpresso_7.6.2
326\lpcxpresso\tools\bin;
似乎是对的?
我尝试过使用Sysinternals进程监视器 我可以看到很多 arm-none-eabi-gcc.exe 得到名称未找到的结果但是有很多也是成功的结果。
我也尝试重新安装编译器和LPCXpresso,没有运气。
如果我输入arm-none-eabi-gcc -v
我得到版本,那么这意味着它的工作
但当我试图在CMD中编译这样arm-none-eabi-gcc led.c
我得到与上述相同的错误
arm-none-eabi-gcc.exe: error: CreateProcess: No such file or directory
尝试在环境中与PATH一起玩,没有运气。我觉得有些事情阻止LPCXpresso找到编译器 这台计算机唯一的防病毒软件是Avira,我禁用了它。我还允许编译器和LPCXpresso通过防火墙 我已经尝试了更多的东西,我会在尝试复制测试后立即添加它。
答案 0 :(得分:2)
看起来你的问题是Vista和GCC的混乱。长话短说,CRT函数access
在Windows和Linux上有不同的行为。微软文档实际上提到了这种差异,但GCC人员并未注意到。这导致了Vista上的一个错误,因为这个版本的Windows在这一点上更加严格。
这里提到了这个错误:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=33281
我没有证据证明你的问题来自这里,但机会很好。
解决方案:
arm-none-eabi-gcc.exe
-D__USE_MINGW_ACCESS
arm-none-eabi-gcc.exe
第三是最简单的,但它有点棘手。目标是劫持access
函数并添加指令以防止意外行为。要修补你的gcc,你有两个解决方案:你上传你的.exe并为我修补它,或者我给你指示自己修补它。 (我也可以为你修补它,如果有效,则给出说明)。修补并不是很难,并且不需要高级知识,但你必须严谨。
正如我所说,我自己没有遇到这个问题,所以我不知道我的解决方案是否真的有用。补丁似乎正在解决这个问题。< / p>
<强> EDIT2:强>
确切的问题是linux access
有一个参数标志来检查文件是否可执行。 Windows access
无法检查此情况。大多数Windows版本的行为只是忽略此标志,并检查文件是否存在,这通常会产生相同的行为。问题是Vista并没有忽略这一点,每当access
用于检查可执行性时,它都会返回错误。这导致GCC程序认为某些可执行文件不在此处。由-D__USE_MINGW_ACCESS
引起的或者手动完成的补丁是在调用access
时删除标志,从而检查是否存在,就像其他Windows版本一样。
修改强>
每个调用其他可执行文件的GCC程序实际上都需要修补,而不仅仅是gcc.exe
。到目前为止,只有gcc.exe
和collect2.exe
。
以下是修补说明:
arm-none-eabi-gcc.exe
。arm-none-eabi-gcc.exe
。_access
。这里要小心,列表很长,并且有多个_access
条目。最后一个(我的最后一个条目)可能是好的。_access
行时,地址应显示在列表标题中,位于第二列第二行,就在 FTs(IAT)下方。记下记事本上的那个地址(对我来说,它是00180948,可能会有所不同)。我将此地址称为F。_access
函数的指令。90
(9090909090...
,90是NOP在组装中)。这是为了找到一个代码洞(未使用的空间)来插入补丁,这个长度是11个字节。找到代码洞穴后,记下前90个的偏移量。确切的偏移量显示在最底部,如 Pos:xxxxxxxx 。我将此偏移称为C。90
的序列:前5个字节为80 64 E4 08 06.这5个字节是防止错误行为的指令。最后6个字节是值J(编辑接下来的6个字节到J,例如FF 25 48 65 58 00),以跳回_access
函数。_access
,或者在步骤6到10之间出错了。注2:搜索栏在结束时不会循环播放;手动转到0以重新找到。注意:您应该修改了总共16个字节。如果补丁程序崩溃,你做错了什么。即使它不起作用,这个补丁也不会导致崩溃。
如果你在某个地方遇到困难,请告诉我。