【问题标题】:gcc to use newlib instead of glibc?gcc 使用 newlib 而不是 glibc?
【发布时间】:2011-08-10 14:07:06
【问题描述】:

我想使用 newlib 而不是 glibc 来编译小型静态二进制文件。 (我不打算交叉编译,因为二进制文件将由同一台计算机使用。)我相信我需要为此编译一个单独的 gcc ?

我编译了gcc:

./configure --prefix=/home/myuser/Desktop/gcc-4.4.5 --libexecdir=/home/myuser/Desktop/gcc-4.4.5 --libdir=/home/myuser/Desktop/gcc-4.4。 5 --with-gxx-include-dir=/home/myuser/Desktop/gcc-4.4.5 --enable-languages=c --enable-libmudflap --disable-multilib --disable-libssp --disable-nls --with-newlib --with-gnu-as --with-gnu-ld --with-system-zlib 制作

它编译时没有错误,但现在当我尝试编译一个简单的 Hello World!它想使用 /usr 中的标头而不是我上面指定的路径的程序。这些是一些错误:

在 /home/myprogram/Desktop/myprogram.c:1 包含的文件中: /usr/include/stdio.h:34:21:错误:stddef.h:没有这样的文件或目录 在 /usr/include/stdio.h:75 包含的文件中, 来自/home/myprogram/Desktop/myprogram.c:1: /usr/include/libio.h:53:21:错误:stdarg.h:没有这样的文件或目录 在 /usr/include/stdio.h:75 包含的文件中, 来自/home/myprogram/Desktop/myprogram.c:1: /usr/include/libio.h:332:错误:“size_t”之前的预期说明符限定符列表 /usr/include/libio.h:364:错误:预期的声明说明符或“...”在“size_t”之前 /usr/include/libio.h:373:错误:预期的声明说明符或“...”在“size_t”之前

我做错了什么?是否需要编译新的 gcc 或者我可以使用现有的 gcc 并使用 newlib 而不是 glibc ???

【问题讨论】:

  • "我相信我需要为此编译一个单独的 gcc 吗?"为什么?难道你不能自己做单独的链接步骤,链接到 newlib 而不是常规的 libc?
  • @Chris:除其他外,您还需要确保您没有使用系统包含文件(您需要使用 newlib 标头)。拥有一个独特的交叉编译器实际上比确保没有任何东西从 glibc 泄漏更容易

标签: gcc newlib


【解决方案1】:

你必须告诉编译器在哪里可以找到包含文件:

gcc -IyourDirectoryHere -IanotherDirectoryHere

-I (就像意大利一样,这是一个减号后跟一个大写字母 i)

更多详情:http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Directory-Options.html

【讨论】:

    【解决方案2】:

    我强烈建议使用crosstool-ng 来构建您的 GCC 工具链。如果您选择 x86 后跟“裸机”作为操作系统,您可以安全地使用 newlib 作为 libc。

    请注意,newlib 在操作系统上工作 - 这是标准的东西,比如 IO,不能开箱即用。

    【讨论】:

      【解决方案3】:

      您不需要为此重建 gcc;您只需将现有的 gcc 指向正确的东西(使用 -I-L 等)告诉它不要引入通常的系统内容(使用 -nostdlib)。 p>

      newlib README file 中标题为“Shared newlib”的部分包含用于在本地编译时针对共享或静态 newlib 构建和链接的符文。

      【讨论】:

        猜你喜欢
        • 2019-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 2012-06-04
        • 1970-01-01
        相关资源
        最近更新 更多