gcc использовать newlib вместо glibc? - PullRequest
7 голосов
/ 21 апреля 2011

Я хочу использовать 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 вместо пути, указанного выше. Вот некоторые из ошибок:

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'

Что я делаю не так? Нужна ли компиляция нового gcc или я могу использовать свой существующий gcc и использовать newlib вместо glibc ???

Ответы [ 3 ]

6 голосов
/ 22 апреля 2011

Вам не нужно перестраивать gcc для этого; вам просто нужно указать свой существующий gcc на правильные вещи (используя -I, -L и т. д.) и , чтобы он не использовал обычные системные компоненты (используя -nostdlib).

В разделе, озаглавленном «Shared newlib» в файле newlib README , есть руны для сборки и связывания с общей или статической newlib при компиляции в исходном виде.

3 голосов
/ 22 апреля 2011

Я настоятельно рекомендую использовать crosstool-ng для создания вашей цепочки инструментов GCC. Если в качестве операционной системы вы выберете x86, а затем «bare metal», вы можете смело использовать newlib в качестве libc.

Обратите внимание, что newlib не работает с операционной системой - то есть стандартные вещи, такие как IO, не будут работать "из коробки".

1 голос
/ 22 апреля 2011

Вы должны указать компилятору, где он может найти включаемые файлы:

gcc -IyourDirectoryHere -IanotherDirectoryHere

-I (это минус, за которым следует заглавная буква i, как в Италии)

Подробнеедетали: http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Directory-Options.html

...