使用newlib替代glibc的gcc?

7
我想使用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 make 它没有错误地编译,但现在当我尝试编译一个简单的Hello World!程序时,它想要使用来自/usr的头文件,而不是我上面指定的路径。这些是一些错误:
/home/myprogram/Desktop/myprogram.c:1:21: 致命错误:stdio.h:没有那个文件或目录 #include ^ 编译中断。 makefile:2: recipe for target 'all' failed make: *** [all] Error 2
我错在哪里?是否需要编译新的gcc,还是可以使用现有的gcc并使用newlib代替glibc?

我认为我需要为此编译一个单独的gcc?为什么?你不能只是进行自己的单独链接步骤,将链接到newlib而不是常规的libc吗? - Chris Lutz
1
@Chris:你还需要确保你没有使用系统包含文件(你需要使用newlib头文件),除其他事项外。拥有一个独立的交叉编译器实际上比确保没有从glibc泄漏任何东西更容易。 - Yann Ramin
3个回答

6
您不需要为此重新构建gcc;您只需要使用-I-L等指令将现有的gcc指向正确的文件(夹)并且使用-nostdlib指令告诉它不要拉入通常的系统内容即可。
在本地编译时,newlib README文件中的“共享newlib”一节提供了构建和链接到共享或静态newlib的符文。

3
我强烈建议使用crosstool-ng来构建您的GCC工具链。如果您选择x86作为操作系统,然后选择"裸机",则可以安全地使用newlib作为libc。
请注意,newlib不能与操作系统一起使用,也就是说,标准的事情,如IO,不会直接起作用。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接