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
НТН
Марио