gcc использовать newlib вместо glibc?

Я хочу использовать 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:
/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???

3 ответа

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

Раздел, озаглавленный "Shared newlib" в файле README newlib, содержит руны для сборки и создания ссылок на совместно используемую или статическую newlib при ее компиляции.

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

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

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

gcc -IyourDirectoryHere -IanotherDirectoryHere

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

Более подробная информация: http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Directory-Options.html

НТН

Марио

Другие вопросы по тегам