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

标签 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 中打开它。

那么,如果文件确实存在,为什么编译器会提示文件不存在呢?

最佳答案

好的,我发现问题是 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 个字符。

arm的解决方案是去:Project->options->C/C++->Misc Controls并添加“--reduce_paths”。见keil armcc manual .

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

关于path - keil编译器错误-无法打开源输入文件-但文件存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39516798/

相关文章:

objective-c - 使用iOS中的类型过滤文件并将其放入特定目录的数组中

path - opencart 中存在 oc_category_path 表的要求是什么?

c# - Linq 中的 Sql IN 子句等效

javascript - 弹出窗口打开的尺寸大于预期尺寸

android - Intent 过滤器和 android :pathPattern

java - 获取java.exe的路径

c++ - 派生类中的静态方法可以调用 C++ 中的 protected 构造函数吗?

scala - 如何使用类型参数的Scala边界访问方法

java - 如何拦截和修改任何更改 JavaFX 场景中标题的尝试?

Java:获取窗口颜色