2016-02-12 148 views
0

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

+0

也许你的SDK在某个地方设置了一个脚本,它将所有环境变量设置为与gcc交叉编译器一起使用。一些你必须使用'source setup environment'启动的东西。这将设置工具链参数,sysroot等... – LPs

回答

0

也许有两种解决方案:

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

    -nostdlib -L在/ usr/myarmtools/GCC/lib目录 - LC的crt0.o

注意-nostdlib抑制的libc中的libstdC++和crt0.o中默认的链接,所以你必须向图书馆提供搜索路径(-L),或明确它们的完整路径和文件将它们链接名称并链接您的目标的C运行时目标代码。

我使用选项2的偏好,因为它可以在任何环境中工作。但是,如果您希望使用通用makefile来构建多个目标,则选项1可能会有用。