1

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

4

1 回答 1

2

可能有两种解决方案:

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

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

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

我优先使用选项 2,因为它适用于任何环境。但是,如果您希望使用通用的 makefile 来构建多个目标,选项 1 可能会很有用。

于 2016-02-13T19:30:27.873 回答