arm gcc 默认编译它的 libc
Posted
技术标签:
【中文标题】arm gcc 默认编译它的 libc【英文标题】:arm gcc by default compiling its libc 【发布时间】:2016-05-24 05:13:55 【问题描述】:我正在尝试使用 cygwin 中的嵌入式 arm gcc 编译器编译 SDK。它是一个基于 makefile 的 SDK。我的目标是皮质 m3 设备。我的问题是,SDK 有一个针对目标的自定义 libc 实现,当我使用 arm 编译器 (arm-none-eabi-gcc) 进行编译时,它看起来会选择 gnu arm libc,而不是 SDK libc。这会导致编译错误。我很肯定 makefile 是正确的(我从正在运行的计算机上复制并粘贴了整个 SDK)。我不再有权访问该计算机来尝试验证/比较设置。我不知道如何防止 arm gcc 编译器寻找自己的 libc 实现,而是将其指向正确的实现。非常感谢任何帮助。
【问题讨论】:
可能您的 SDK 在某处有一个脚本,该脚本将所有环境变量设置为与 gcc 交叉编译器一起使用。您必须使用source setup environment
启动的东西。这将设置工具链参数、sysroot 等...
【参考方案1】:
可能有两种解决方案:
-
创建特定于您的工具的环境 - GNU 工具链使用许多环境变量来定义默认行为。对于自定义工具链,您需要设置所有必要的变量来覆盖系统默认值。
使用 -nostdlib
链接器选项并显式链接所需的库和 C 运行时启动代码,因此您的链接器命令行可能包括以下内容:
-nostdlib -L/usr/myarmtools/gcc/lib -lc crt0.o
请注意-nostdlib
禁止默认链接 libc libstdc++ 和 crt0.o,因此您必须提供库的搜索路径 (-L),或通过完整路径和文件名显式链接它们并链接 C 运行时目标的目标代码。
我优先使用选项 2,因为它适用于任何环境。但是,如果您希望使用通用的 makefile 来构建多个目标,选项 1 可能会很有用。
【讨论】:
以上是关于arm gcc 默认编译它的 libc的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu 编译 ARM-Linux-Gcc 工具链 -- 编译过程