Newlib

Discussing libraries simplifying applications development
  • А браузер? :mrgreen:
  • Serge
    Спасибо за либу! Будет свободное время - ОБЯЗАТЕЛЬНО попробую. :)

    Mario
    Самый лучший ИМХО учебник по Си можно скачать здесь - http://publ.lib.ru/ARCHIVES/P/PAVLOVSKA ... T._A..html
    Потом, думаю, идёт книга от создателей языка (Кернигана и Ритчи).
    По С++ читать нужно Страуструпа...
  • Главное не путать С и С++. Идеологически это совершенно разные языки.
    Last edited by Serge on Fri Oct 29, 2010 9:50 pm, edited 1 time in total.
  • Идеалогия идеолией (да, есть такое), но синтаксис С++ таков, что если выделить из С++ некую часть, то это подмножество будет почти совместимо с С. И так думаю не только я (на днях консультировался у одного известного программиста с 30-летним стажем).
  • Albom wrote: Самый лучший ИМХО учебник по Си можно скачать здесь - http://publ.lib.ru/ARCHIVES/P/PAVLOVSKA ... T._A..html
    Потом, думаю, идёт книга от создателей языка (Кернигана и Ритчи).
    По С++ читать нужно Страуструпа...
    Спасибо за информацию. :)

    Я так понимаю меня не совсем правильно поняли (судя по реакции) - я не собираюсь писать на С или С++ программы. У меня есть самый лучший, самый замечательнейший, и самый мощный инструмент - FASM. Теоретически я могу на нем написать все - другой вопрос сколько это займет времени и хватит ли моего уровня образования. Бинарные деревья такие... бинарные. :wink:

    Что С, что С++, что C# интересуют меня исключительно с целью натырить кода для библиотек, которые я потом смогу использовать в FASM. Глупо не пользоваться наработанными вещами, реализация которых на FASM потребовала бы значительного времени и немалых усилий. Другие же вещи я достаточно легко и быстро пишу на FASM - в том числе и GUI элементы. Вот как-то так...
  • Mario
    да, поняли не совсем правильно. :) но от учебника Павловской отказываться не стОит - там есть отличное описание стандартных ф-ций С.

    Serge
    попробовал. пока успехов нет. если компилировать только через gcc, то mingw не понимает параметры --image-base и --stack. попробовал с помощью батника:

    Code: Select all

     gcc -c main.c
     ld -nostdlib -T kos.ld -o out.kex --image-base 0 --stack 8192 main.o libc.a 
     objcopy out.kex -O binary
    Скомпилировалось. KlbrInWin из-за MENUET02 в заголовке не запустил. Изменил в редакторе на 1. Некоторый код выполняется (не знаю, работает или нет - не создалась консоль при вызове printf), некоторый вылетает.
    Что посоветуешь?

    P.S. как использовать те инклуды, что в архиве? если изменяю в программе #include <stdio.h> на #include "include/stdio.h", то компилятор не находит newlib.h.
  • Для сборки libtest

    Code: Select all

    gcc -c -O2 -fno-builtin-printf -fomit-frame-pointer -I/kos/libs/libc/include main.c -o main.o
    gcc -c -O2 -fno-builtin-printf -fomit-frame-pointer -I/kos/libs/libc/include error.c -o error.o
    ld -nostdlib -T kos.ld -o libtest.exe --image-base 0 --stack 0x100000 main.o error.o libc.a
    С ключом компилятора -I надо указать путь к заголовочным файлам newlib. У меня стоят Msys (mingw32 с никсовыми утилитами) и Codeblocks. Редактировать в нём неудобно, а собирать очень даже.

    Консоль пока не реализована, весь вывод идет на доску отладки. Появится консоль - stdout будет направляться на неё. Размер стека лучше не ограничивать. Я сделаю динамическое выделение стека, как и для потоков. В этом случае стек основной программы будет ограничен неприсутствующими страницами - будет дополнительная защита от переполнения стека. И лишняя физическая память не будет выделяться.

    Править заголовок не очень удачная идея. Он ведь специально для программм с TLS. Со старым заголовком многопоточные не будут работать точно.
    В Qemu всё замечательно работает. Даже fplay в слайдовом режиме.
  • Обновил архив с libc и добавил скомпилированные библиотеки ffmpeg. Скачать можно здесь
  • Serge wrote:Обновил архив с libc и добавил скомпилированные библиотеки ffmpeg.
    Замечательно, теперь можно плееры делать на любой вкус и цвет, да и в игры видео интегрировать например. :)

    Mario
    Я в сеть не с домашнего компа сейчас выхожу. HTMLv вполне себе браузер, только CSS, XHTML и нормальный вывод изображений и позиционирование контента сделать надо. :)
  • ld -nostdlib -T kos.ld -o libtest.exe --image-base 0 --stack 0x100000 main.o error.o libc.a
    после этой комманды получаю:
    error.o:error.c:(.text+0xd): undefined reference to `_imp___iob'
    error.o:error.c:(.text+0x8f): undefined reference to `_flsbuf'
    error.o:error.c:(.text+0x100): undefined reference to `_imp___iob'

    пакет mingw 5.1.6 (gcc 4.5.0)
    Attachments
    main+error.rar (1.84 KiB)
    main.o + error.o
    Downloaded 255 times
  • <Lrz>

    _imp___iob - ссылка на импортируемые функции. Надо указывать путь к заголовочным файлам Newlib.
  • Code: Select all

    sourcerer@sourcerer-laptop ~/libc/test $ ls
    error.c  error.h  main.c 
    sourcerer@sourcerer-laptop ~/libc/test $ gcc -c -O2 -fno-builtin-printf -fomit-frame-pointer -I ../include main.c -o main.o
    sourcerer@sourcerer-laptop ~/libc/test $ ls
    error.c  error.h  main.c  main.o
    sourcerer@sourcerer-laptop ~/libc/test $ gcc -c -O2 -fno-builtin-printf -fomit-frame-pointer -I ../include error.c -o error.o
    error.c: In function ‘error_tail’:
    error.c:60: warning: incompatible implicit declaration of built-in function ‘_exit’
    sourcerer@sourcerer-laptop ~/libc/test $ ls
    error.c  error.h  error.o  main.c  main.o
    sourcerer@sourcerer-laptop ~/libc/test $ ld -nostdlib -T ../kos.ld -o libtest.exe --image-base 0 --stack 0x100000 main.o error.o ../libc.a
    ld: unrecognized option '--image-base'
    ld: use the --help option for usage information
    sourcerer@sourcerer-laptop ~/libc/test $ ld --version
    GNU ld (GNU Binutils for Ubuntu) 2.20.1-system.20100303
    Copyright 2009 Free Software Foundation, Inc.
    This program is free software; you may redistribute it under the terms of
    the GNU General Public License version 3 or (at your option) a later version.
    This program has absolutely no warranty.
    
    Такие дела :(
  • Линуксоидный ld, из коробки, как бэ не умеет PE (что там про image-base, я не очень в курсе, наверное сюда же). Так что тут два варианта, колдовать с пересборкой ld (binutils?!), либо, что я считаю правильнее, брать mingw32 под линух, такой есть.

    ..bw
  • Serge wrote:Для сборки libtest
    Код:
    gcc -c -O2 -fno-builtin-printf -fomit-frame-pointer -I/kos/libs/libc/include main.c -o main.o
    gcc -c -O2 -fno-builtin-printf -fomit-frame-pointer -I/kos/libs/libc/include error.c -o error.o
    ld -nostdlib -T kos.ld -o libtest.exe --image-base 0 --stack 0x100000 main.o error.o libc.a
    С ключом компилятора -I надо указать путь к заголовочным файлам newlib.
    Собрал в Линуксе libtest кросскомпилятором.
    mingw32-gcc -c -fno-builtin-printf -fomit-frame-pointer -I../include main.c -o main.o
    mingw32-gcc -c -fno-builtin-printf -fomit-frame-pointer -I../include error.c -o error.o
    mingw32-ld -nostdlib -T ../kos.ld -o libtest.exe --image-base 0 --stack 0x100000 main.o error.o ../libc.a
    mingw32-objcopy -O binary libtest.exe
    mv libtest.exe libtest.kex

    В итоге libtest падает по pagefault. Уже собранный бинарник из архива при этом работает.
  • Who is online

    Users browsing this forum: No registered users and 8 guests