【问题标题】:arm gcc by default compiling its libcarm gcc 默认编译它的 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 等...

标签: gcc arm embedded libc gnu-arm


【解决方案1】:

可能有两种解决方案:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多