Win7/cygwin下的codesourcery工具链找不到一些文件

Posted

技术标签:

【中文标题】Win7/cygwin下的codesourcery工具链找不到一些文件【英文标题】:Codesourcery toolchain under Win7/cygwin can't find some files 【发布时间】:2013-04-23 15:10:01 【问题描述】:

我已经对此进行了搜索,但我发现的问题是关于让工具链工作的问题,我的问题是它适用于除少数目录之外的所有目录。我也不是在构建 Linux。

我正在尝试将项目从 Linux 机器转移到 Windows 以使人们开心。相同的项目在 Linux (Ubuntu 12.04) 下使用相同工具链的 Linux 二进制文件构建良好(我最近从 Mentor 的同一目录重新加载了两个工具链以确保,请参阅下面的详细信息)。

我安装了 Cygwin,获取了软件包,设置了路径等。一般来说,该构建适用于 90% 的项目,但是由于 make 遍历目录,它会找到除两个文件之外的所有文件(澄清一下,这两个是第一个文件在他们各自的目录中,所以我认为问题将适用于整个目录)。下面的日志显示了第一次失败:

如果我将 lwip 从构建中移除,那么它会在下一个构建中爆炸 如果我从构建中取出下一个,那么其他所有内容(相当多)都会编译;那么链接器会按预期在两个缺失的项目上失败。

更准确地说,例如

它找到 /home/Nadi/project/version-2.9/external/freertos/Source/portable/GCC/ARM_CM3_MPU/port.c

但不是 /home/Nadi/project/version-2.9/external/lwip/src/api/api_lib.c

从我正在运行 make 的目录中,“ls”找到编译器无法找到的文件。

日志:

$ make
external/freertos 
external/lwip  
 [cc] Debug/api_lib.o 
arm-none-eabi-gcc.exe: error: /home/Nadi/project/version-2.9/external/lwip/src/api/api_lib.c: No such file or directory 
arm-none-eabi-gcc.exe: fatal error: no input files compilation terminated. 
Makefile:189: recipe for target `Debug/api_lib.o' failed 
make[2]: *** [Debug/api_lib.o] Error 1 
Makefile:37: recipe for target `lwip_world' failed 
make[1]: *** [lwip_world] Error 2 
Makefile:160: recipe for target `extern' failed 
make: *** [extern] Error 2

详情:

GCC 链:arm-none-eabi-gcc; gcc 版本 4.7.2(Sourcery CodeBench Lite 2012.09-63) Cygwin:CYGWIN_NT-6.1-WOW64

【问题讨论】:

你的 PATH 中有 cygpath,还是有 $CYGPATH 设置? 别这样。查看THIS类似问题的答案。 【参考方案1】:

虽然在这种特殊情况下可能没有帮助,但我遇到了类似的问题,CodeSourcery 的 gcc 根本无法识别 Cygwin 的路径,如 /cygdrive/d/foo.c - 安装 cygpath 包并设置环境变量 export CYGPATH=c:/cygwin32/bin/cygpath(或 Windows 控制台中的 set CYGPATH=c:/cygwin32/bin/cygpath ) 解决了所有问题。

请务必以与上述完全相同的方式定义 cygpath 可执行文件的路径,无论使用的是 Cygwin 还是 Windows 控制台。

【讨论】:

【参考方案2】:

我之前评论的详细信息是,使用基于 Sourcery 的交叉编译器的 windows/cygwin 组合会遇到很多麻烦。您可以在SamyGo 阅读更多相关信息。使用 Windows 的一些问题,在那里以所有血淋淋的细节呈现,是:

使用 ACL 设置文件权限和所有权(不兼容 Linux。) 有自己的方式来创建符号链接(不兼容 Linux。) 对其固定的 NTFS 驱动器使用不区分大小写的默认值。 (经常默默地破坏最初在 Linux 下压缩的档案。) 文件路径使用 Win32(非 POSIX)标准(不兼容 Linux。) 使用 2 个字符回车符和换行符(“\r”和“\n”) 行尾 (EOL) 表示,与仅使用 NL 的 POSIX 相反。

因此,为了不浪费时间进行第 3 方调试,您最好从头开始构建自己的交叉编译器,如另一篇文章中的 XDA 链接所示。自从 android 出现以来,这已不再困难。

【讨论】:

以上是关于Win7/cygwin下的codesourcery工具链找不到一些文件的主要内容,如果未能解决你的问题,请参考以下文章

CodeSourcery 给出编译错误:缺少位/c++config.h

Windows 上的 QtCreator 使用 CodeSourcery 工具链为 Linux ARM 交叉编译

使用 -mfloat-abi=hard 和 -mfpu=vfp/neon Codesourcery Lite 2013.05-24

在 Yocto 树中使用预构建的工具链

ARM交叉编译工具链

ARM交叉编译工具链分类说明