keil编译器错误 - 无法打开源输入文件 - 但文件存在

时间:2016-09-15 17:15:38

标签: path compiler-errors window

我在Keil 5编译 使用armcc:

*** Using Compiler 'V5.06 (build 20)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'

我收到了以下错误:

compiling softdevice_handler.c...
"no source": Error:  #5: cannot open source input file "..\..\..\..\..\..\components\softdevice\common\softdevice_handler\softdevice_handler.c": No such file or directory
..\..\..\..\..\..\components\softdevice\common\softdevice_handler\softdevice_handler.c: 0 warnings, 1 error

我确定源c文件存在。我在GUI中添加了它,我可以在GUI中打开它。

那么,如果文件存在,编译器会抱怨该文件不存在?

1 个答案:

答案 0 :(得分:2)

好的,我发现问题是windows 7 path length limit of ~255 bytes

结合keil编译器的愚蠢。它的作用是结合起来 项目路径+相对资源路径。例如:

project path: projects/projectX/toolchain/keil5/projectX.uvprojx
src path is : projects/projectX/src/a/b/src.c

那么armcc内部使用的是:

projects/projectX/toolchain/keil5/../../a/b/src.c

它增加了额外的内容:

 /toolchain/keil5/../../

因此,即使src.c不是太深,当你对项目路径的一部分求和时,它也可以超过255个字符。

手臂的解决方案是转到:Project->options->C/C++->Misc Controls并添加“--reduce_paths”。见keil armcc manual

另一种选择是将项目复制到根文件夹附近,以减少最大项目路径。