gcc to use newlib instead of glibc?
Asked Answered
T

3

7

I want to use newlib instead of glibc in order to compile small static binaries. (I do not intend to cross-compile as the binaries are to be used by the same computer.) I believe that I need to compile a separate gcc for this ?

I compiled 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

It compiled without errors but now when I try to compile a simple Hello World! program it wants to use headers from /usr instead of the path I specified above. These are some of the errors:

In file included from /home/myprogram/Desktop/myprogram.c:1:
/usr/include/stdio.h:34:21: error: stddef.h: No such file or directory
In file included from /usr/include/stdio.h:75,
                 from /home/myprogram/Desktop/myprogram.c:1:
/usr/include/libio.h:53:21: error: stdarg.h: No such file or directory
In file included from /usr/include/stdio.h:75,
                 from /home/myprogram/Desktop/myprogram.c:1:
/usr/include/libio.h:332: error: expected specifier-qualifier-list before 'size_t'
/usr/include/libio.h:364: error: expected declaration specifiers or '...' before 'size_t'
/usr/include/libio.h:373: error: expected declaration specifiers or '...' before 'size_t'

What am I doing wrong ? Is compiling a new gcc necessary or can I use my existing gcc and use newlib instead of glibc ???

Trouvaille answered 21/4, 2011 at 19:59 Comment(2)
"I believe that I need to compile a separate gcc for this ?" Why? Can't you just do your own separate linking step, linking to newlib instead of the regular libc?Cuneal
@Chris: You also need to make sure you're not using system include files (you need to use the newlib headers), amongst other things. Having a distinct cross-compiler is actually easier than making sure nothing is leaking in from glibc.Alwyn
O
6

You shouldn't need to rebuild gcc for this; you just need to point your existing gcc at the right things (using -I, -L etc.) and tell it not pull in the usual system stuff (using -nostdlib).

The section entitled "Shared newlib" in the newlib README file has runes for building and linking against either shared or static newlib when compiled natively.

Ophthalmitis answered 21/4, 2011 at 23:7 Comment(0)
A
3

I would strongly recommend using crosstool-ng to build your GCC toolchain. If you choose x86 followed by "bare metal" as the operating system, you can safely use newlib as a libc.

Note that newlib does not work with an operating system - that is standard things, like IO, won't work out of the box.

Alwyn answered 21/4, 2011 at 20:48 Comment(0)
R
1

You have to tell the compiler where it can find the include files:

gcc -IyourDirectoryHere -IanotherDirectoryHere

-I (that is a minus followed by a capital i as in Italy)

More details: http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Directory-Options.html

Rigidify answered 21/4, 2011 at 20:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.