Newlib

Discussing libraries simplifying applications development
  • Так не работает. Пишет, что нет такой цели. Видимо, дело в conf-файле.
  • Скорее всего.
  • Обновил либу и исправил некоторые ошибки.
    http://code.google.com/p/kolibri-pe/dow ... 6_11_12.7z
    Теперь при завершении программы закрываются все открытые файлы.
  • binutils-2.20 в linux с GCC 4.7.2 у меня не собрались (как с патчем, так и без него).
    Сделал патч для binutils-2.23.1, по образу и подобию лежащего в SVN.
    patch-2.23.1.7z (6.26 KiB)
    Downloaded 731 times
  • Jaeger
    Закинь его на свн.
  • Подскажите, как собрать newlib из исходников на SVN?
    Пробовал собирать системным GCC и GCC из тулчейна, подробности под катом.
    Spoiler:1. Вначале сборка падала на crt/crtdll.c с сообщением, что не знает __fastcall и __stdcall - добавил в include/sys/kos_io.h

    #ifndef WIN32
    #define __stdcall
    #define __fastcall
    #endif

    2. Попробовал собрать системным gcc с sysroot=(toolchain dir)
    gcc -c -O2 -fomit-frame-pointer -m32 -march=i586 -mtune=i586 --sysroot=/home/john/Kolibri/cross -I ./include -o crt/crtdll.o crt/crtdll.c
    gcc -m32 -march=i586 -mtune=i586 -c -o crt/chkstk.o crt/chkstk.S
    gcc -m32 -march=i586 -mtune=i586 -c -o crt/exit.o crt/exit.S
    gcc -m32 -march=i586 -mtune=i586 -c -o crt/setjmp.o crt/setjmp.S
    crt/setjmp.S: Assembler messages:
    crt/setjmp.S:32: Error: unknown pseudo-op: `.def'
    crt/setjmp.S:32: Error: unknown pseudo-op: `.scl'
    crt/setjmp.S:32: Error: Missing symbol name in directive
    crt/setjmp.S:32: Error: нераспознанный тип символа 32
    crt/setjmp.S:32: Error: unknown pseudo-op: `.endef'
    crt/setjmp.S:66: Error: unknown pseudo-op: `.def'
    crt/setjmp.S:66: Error: unknown pseudo-op: `.scl'
    crt/setjmp.S:66: Error: Missing symbol name in directive
    crt/setjmp.S:66: Error: нераспознанный тип символа 32
    crt/setjmp.S:66: Error: unknown pseudo-op: `.endef'
    make: *** [crt/setjmp.o] Ошибка 1

    3. Попробовал собрать с помощью инструментов из тулчейна. Прописал в Makefile

    SYSROOT = /home/john/Kolibri/cross
    CC = $(SYSROOT)/bin/i586-pc-kos32-gcc
    LD = $(SYSROOT)/bin/i586-pc-kos32-ld
    AR = $(SYSROOT)/bin/i586-pc-kos32-ar
    AS = $(SYSROOT)/bin/i586-pc-kos32-as
    ASFLAGS = -m32 -march=i586 -mtune=i586
    CFLAGS = -c -O2 -fomit-frame-pointer -m32 -march=i586 -mtune=i586 --sysroot=$(SYSROOT)

    Вывод:
    /home/john/Kolibri/cross/bin/i586-pc-kos32-gcc -c -O2 -fomit-frame-pointer -m32 -march=i586 -mtune=i586 --sysroot=/home/john/Kolibri/cross -I ./include -o crt/crtdll.o crt/crtdll.c
    crt/crtdll.c: In function 'crt_startup':
    crt/crtdll.c:85:5: warning: passing argument 2 of 'load_file' from incompatible pointer type [enabled by default]
    In file included from crt/crtdll.c:10:0:
    ./include/sys/kos_io.h:72:7: note: expected 'size_t *' but argument is of type 'int *'
    /tmp/cclg8P7P.s: Assembler messages:
    /tmp/cclg8P7P.s:5: Warning: Псевдооперация .type используется вне .def/.endef: игнорируется.
    /tmp/cclg8P7P.s:5: Error: junk at end of line, first unrecognized character is `_'
    /tmp/cclg8P7P.s:33: Warning: Псевдооперация .size используется вне .def/.endef: игнорируется.
    /tmp/cclg8P7P.s:33: Error: junk at end of line, first unrecognized character is `_'
    /tmp/cclg8P7P.s:36: Warning: Псевдооперация .type используется вне .def/.endef: игнорируется.
    /tmp/cclg8P7P.s:36: Error: junk at end of line, first unrecognized character is `_'
    /tmp/cclg8P7P.s:44: Warning: Псевдооперация .size используется вне .def/.endef: игнорируется.
    /tmp/cclg8P7P.s:44: Error: junk at end of line, first unrecognized character is `_'
    /tmp/cclg8P7P.s:51: Warning: Псевдооперация .type используется вне .def/.endef: игнорируется.
    /tmp/cclg8P7P.s:51: Error: junk at end of line, first unrecognized character is `c'
    /tmp/cclg8P7P.s:134: Warning: Псевдооперация .size используется вне .def/.endef: игнорируется.
    /tmp/cclg8P7P.s:134: Error: junk at end of line, first unrecognized character is `c'
    make: *** [crt/crtdll.o] Ошибка 1
  • #define __stdcall __attribute__((stdcall))
    Возможно, используется какой-то не тот ассемблер для S-файлов.
  • Jaeger

    make static

    Я собирал только под mingw32, кросскомпилятор не проверял.
  • SoUrcerer
    Похоже на то. Пока прописал для тех файлов, что не компилировались, отдельным правилом использование i586-pc-kos32-gcc.

    Serge
    При компиляции нескольких файлов из подкаталога math gcc ругается на отсутствие файла mconf.h (под mingw вместо него используется "cephes_mconf.h"). Где его можно найти?
  • cephes_mconf.h в папке newlib/math. Просто переименуй.
  • Собрал при помощи mingw32, никаких изменений не потребовалось. Спасибо за помощь!
    По-видимому, свой кросс-GCC я собрал криво, буду разбираться.
  • Jaeger
    Я собирал по этому руководству. http://wiki.osdev.org/GCC_Cross-Compiler
  • Свежие сборки
    newlib с исправленной libm ftp://ftp.kolibrios.org/users/Serge/new ... 1_03_13.7z
    и ffmpeg-1.1.3 ftp://ftp.kolibrios.org/users/Serge/new/ffmpeg-1.1.3.7z
  • I don't understand how to use the newlib.
    I tried translating this thread to spanish and english but it's not accurate.

    I'll be grateful if someone can explain me in english what I have to do to use the newlib.
  • Who is online

    Users browsing this forum: No registered users and 4 guests