2016-09-15 881 views
0

我在Keil的5 使用器armcc編譯:Keil編譯錯誤 - 無法打開源輸入文件 - 但文件存在

*** 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中打開它。

那麼爲什麼編譯器會抱怨文件不存在,如果文件存在?

回答

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個字符。

針對arm的解決方案是去:Project->options->C/C++->Misc Controls並添加「--reduce_paths」。見keil armcc manual

另一種方法是將項目複製到根文件夾,以減少最大項目路徑。

相關問題