Newlib
-
Да .
А браузер?
Serge
Спасибо за либу! Будет свободное время - ОБЯЗАТЕЛЬНО попробую.
Mario
Самый лучший ИМХО учебник по Си можно скачать здесь - http://publ.lib.ru/ARCHIVES/P/PAVLOVSKA ... T._A..html
Потом, думаю, идёт книга от создателей языка (Кернигана и Ритчи).
По С++ читать нужно Страуструпа...
Спасибо за либу! Будет свободное время - ОБЯЗАТЕЛЬНО попробую.
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. Теоретически я могу на нем написать все - другой вопрос сколько это займет времени и хватит ли моего уровня образования. Бинарные деревья такие... бинарные.
Что С, что С++, что C# интересуют меня исключительно с целью натырить кода для библиотек, которые я потом смогу использовать в FASM. Глупо не пользоваться наработанными вещами, реализация которых на FASM потребовала бы значительного времени и немалых усилий. Другие же вещи я достаточно легко и быстро пишу на FASM - в том числе и GUI элементы. Вот как-то так...
Mario
да, поняли не совсем правильно. но от учебника Павловской отказываться не стОит - там есть отличное описание стандартных ф-ций С.
Serge
попробовал. пока успехов нет. если компилировать только через gcc, то mingw не понимает параметры --image-base и --stack. попробовал с помощью батника:
Скомпилировалось. KlbrInWin из-за MENUET02 в заголовке не запустил. Изменил в редакторе на 1. Некоторый код выполняется (не знаю, работает или нет - не создалась консоль при вызове printf), некоторый вылетает.
Что посоветуешь?
P.S. как использовать те инклуды, что в архиве? если изменяю в программе #include <stdio.h> на #include "include/stdio.h", то компилятор не находит newlib.h.
да, поняли не совсем правильно. но от учебника Павловской отказываться не стОит - там есть отличное описание стандартных ф-ций С.
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
Что посоветуешь?
P.S. как использовать те инклуды, что в архиве? если изменяю в программе #include <stdio.h> на #include "include/stdio.h", то компилятор не находит newlib.h.
Для сборки libtest
С ключом компилятора -I надо указать путь к заголовочным файлам newlib. У меня стоят Msys (mingw32 с никсовыми утилитами) и Codeblocks. Редактировать в нём неудобно, а собирать очень даже.
Консоль пока не реализована, весь вывод идет на доску отладки. Появится консоль - stdout будет направляться на неё. Размер стека лучше не ограничивать. Я сделаю динамическое выделение стека, как и для потоков. В этом случае стек основной программы будет ограничен неприсутствующими страницами - будет дополнительная защита от переполнения стека. И лишняя физическая память не будет выделяться.
Править заголовок не очень удачная идея. Он ведь специально для программм с TLS. Со старым заголовком многопоточные не будут работать точно.
В Qemu всё замечательно работает. Даже fplay в слайдовом режиме.
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
Консоль пока не реализована, весь вывод идет на доску отладки. Появится консоль - 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)
после этой комманды получаю:
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.
_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
..bw
Собрал в Линуксе libtest кросскомпилятором.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.
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 42 guests