默认情况下,ARM GCC 编译其 libc



我正在尝试使用cygwin中的嵌入式arm gcc编译器编译SDK。 它是一个基于生成文件的SDK。 我的目标是皮层m3设备。 我的问题是,SDK有一个针对目标的自定义libc实现,当我使用arm编译器(arm-none-eabi-gcc)编译时,它看起来会选择gnu arm libc,而不是SDK libc。 这会导致编译错误。 我肯定makefile是正确的(我从工作的计算机复制并粘贴了整个SDK)。 我无法再访问该计算机来尝试验证/比较设置。 我不知道如何防止 arm gcc 编译器寻找自己的 libc 实现,而是将其指向正确的实现。 任何帮助将不胜感激。

也许有两种解决方案:

  1. 创建一个特定于您的工具的环境 - GNU 工具链使用许多环境变量来定义默认行为。 对于自定义工具链,您需要设置所有必要的变量来覆盖系统默认值。
  2. 使用-nostdlib链接器选项并显式链接所需的库和 C 运行时启动代码,以便链接器命令行可能包括以下内容:

    -

    nostdlib -L/usr/myarmtools/gcc/lib -lc crt0.o

请注意,-nostdlib禁止默认链接 libc libstdc++ 和 crt0.o,因此您必须提供库的搜索路径 (-L),或者通过其完整路径和文件名显式链接它们,并链接目标的 C 运行时对象代码。

我使用选项 2 作为首选项,因为它可以在任何环境中工作。 但是,如果您希望使用通用生成文件来构建多个目标,则选项 1 可能很有用。

最新更新