Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср дек 13, 2017 2:13 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 41 сообщение ]  На страницу 1 2 3 След.
Автор Сообщение
СообщениеДобавлено: Вт май 23, 2017 9:18 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
Здравствуйте форумчане! Я новичок в программировании на С. Программировать на нем, пока что, толком не умею, поэтому заранее прошу прощения и снизхождения за нубские вопросы.

Нашел 2 статьи на Хабре:
1. https://habrahabr.ru/company/kolibrios/blog/313772/
2. https://habrahabr.ru/company/kolibrios/blog/229231/

Прочитал данные статейки, но мало что понял. :(

1. Как установить gcc для Kolibri из toolchain'а в Linux? Пользуюсь Ubuntu.
2. Что делать, если я не хочу использовать newlib и другие библиотеки?

Мне нужен рабочий пример кода простого окна без исп. лишних библиотек на чистом C. Есть ли такой пример кода? Если нет, то приведите пожалуйста такой пример кода и как его компилировать. Я только учусь, поэтому хочу написать все дополнительные функции сам, чтобы лучше понять как всё работает в языке C и в Kolibri.

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
СообщениеДобавлено: Вт май 23, 2017 10:37 pm 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 269
1. развернуть архив чтобы бинарники kos32-gcc были доступны в пути

2. newlib (klib для tinyc) это стандартная библиотека ф-ций. Вкратце - язык С плюс библиотека составляют единое целое и покрывается описанием ANSI стандарта, и отказываться от нее просто так неразумно.
Без нее обойтись можно, но это не начинающий уровень, поскольку некоторые функции используются еще при загрузке/выгрузке программы (до main() и после). В большинстве случаев это маловажно, поскольку линкер С выбросит из результирующего бинарника неиспользуемый библиотечный код (для С++ ему отследить зависимости сложнее - бинарники толще)

Примеры и строки компиляции есть в статейках.
Практически минимальные граф программы:
http://websvn.kolibrios.org/filedetails ... e%2Fmain.c для gcc
http://websvn.kolibrios.org/filedetails ... inbasics.c для tcc

Как сделаны вызовы системных функций - см в kos32sys.h - маленькие ассемблерные обертки.

Можно в итоге:
1. Использовать TinyC внутри Колибри без кросс-компиляции - это проще, но не очень удобно - пока нет программерского удобного редактора.
2. Можно не забывать про С-- в нем в принципе отсутствует стандартная библиотека и будет самый компактный код. Тоже работает внутри Колибри.
Минимальный пример http://websvn.kolibrios.org/filedetails ... template.c
3. gcc это очень мощный инструмент - полноценный компилятор С и С++ - но и возиться придется больше - кросс компиляция сложнее.

P.S. Начинать учиться программированию в Колибри - не самые тепличные условия.


Вернуться к началу
СообщениеДобавлено: Вт май 23, 2017 11:34 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1232
See this page as well: http://diamond.kolibrios.org/hll/hll.htm
But beware, menuetlibc as proposed to use here is outdated (although will still work for basic things)...

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 2:06 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
Siemargl писал(а):
1. развернуть архив чтобы бинарники kos32-gcc были доступны в пути
Ответ не ясен. То есть, мне надо распаковать архив x86_64-linux-kos32-5.4.0.7z в подходящую папку, например "usr/local", дальше прописать путь в "etc/environment" к "usr/local/win32"? Но в папке win32, много папок с файлами. Они автоматически подхватятся? :?
Siemargl писал(а):
2. newlib (klib для tinyc) это стандартная библиотека ф-ций. Вкратце - язык С плюс библиотека составляют единое целое и покрывается описанием ANSI стандарта, и отказываться от нее просто так неразумно.
Без нее обойтись можно, но это не начинающий уровень, поскольку некоторые функции используются еще при загрузке/выгрузке программы (до main() и после). В большинстве случаев это маловажно, поскольку линкер С выбросит из результирующего бинарника неиспользуемый библиотечный код (для С++ ему отследить зависимости сложнее - бинарники толще)
Ясно. Просто хочется минимализма. Не хочется делать как в Linux, где ставишь маленькую программу, а она за собой, грубо говоря, тянет +100500 монструозых библиотек, после чего в системе начинаются тормоза и перерасход оперативной памяти. :(
Siemargl писал(а):
Примеры и строки компиляции есть в статейках.
Практически минимальные граф программы:
http://websvn.kolibrios.org/filedetails ... e%2Fmain.c для gcc
http://websvn.kolibrios.org/filedetails ... inbasics.c для tcc

Как сделаны вызовы системных функций - см в kos32sys.h - маленькие ассемблерные обертки.
Спасибо, посмотрю. :D
Siemargl писал(а):
Можно в итоге:
1. Использовать TinyC внутри Колибри без кросс-компиляции - это проще, но не очень удобно - пока нет программерского удобного редактора.
2. Можно не забывать про С-- в нем в принципе отсутствует стандартная библиотека и будет самый компактный код. Тоже работает внутри Колибри.
Минимальный пример http://websvn.kolibrios.org/filedetails ... template.c
3. gcc это очень мощный инструмент - полноценный компилятор С и С++ - но и возиться придется больше - кросс компиляция сложнее.
Погуглил на счёт этих компиляторов, понял, что С-- не хочу, он не развивается, да и с кросс-платформенностью беда. TinyC (он же tcc) тоже толком не развивается (последняя версия 0.9.26 выпущена в 2013). Если gcc для Kolibri не осилю, то тогда попробую TinyC. :roll:
Siemargl писал(а):
P.S. Начинать учиться программированию в Колибри - не самые тепличные условия.
Ничего страшного, с детства расту в спартанских условиях. :lol:

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 2:07 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
hidnplayr писал(а):
See this page as well: http://diamond.kolibrios.org/hll/hll.htm
But beware, menuetlibc as proposed to use here is outdated (although will still work for basic things)...
Thanks, I'll take a look. :D

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 2:49 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
Привет всем, снова!

Распаковал архив "x86_64-linux-kos32-5.4.0.7z", получил папку win32 и поместил её в папку "usr/local".
Распаковал архив "sdk-28-10-16.7z", переименовал в sdk и поместил в папку "usr/local/win32".

Добавил пути в переменную PATH:
/usr/local/win32
/usr/local/win32/bin
/usr/local/win32/sdk/lib

Полностью строка выглядит так:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/win32:/usr/local/win32/bin:/usr/local/win32/sdk/lib"

Проверил видет ли терминал компилятор, командой "kos32-gcc -v" и проверка прошла успешно.

Исходник взял с svn, переименовал в "binclock.c" и поместил в папку:
~/Sandbox/C/kos32

Ввёл следующие команды для компиляции в терминале:
cd ~/Sandbox/C/kos32
kos32-gcc -o binclock binclock.c

Но безуспешно, пишет вот это:
/usr/local/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: error while loading shared libraries: libisl.so.10: cannot open shared object file: No such file or directory

Помогите пожалуйста. Что я делаю не так? Как откомпилировать программу?

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 3:42 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1077
Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0

_________________
я лишь учусь


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 3:46 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1077
punk_joker писал(а):
Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0

Конкретнее hello, только в параметры линковщика добавь параметр --subsystem native, если не ошибаюсь, иначе с запуском программы будет выскакивать окно консоли

_________________
я лишь учусь


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 4:40 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
punk_joker писал(а):
punk_joker писал(а):
Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0

Конкретнее hello, только в параметры линковщика добавь параметр --subsystem native, если не ошибаюсь, иначе с запуском программы будет выскакивать окно консоли
Скопировал с svn этот hello.c и Makefile.static (переименовал его в Makefile, иначе не работает) в папку "~/Sandbox/C/kos32".

Сделал так в терминале:
cd ~/Sandbox/C/kos32
make

но не работает, пишет:
Makefile:22: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.

Что не так? :roll:

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 4:52 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1077
Случаем редактор не заменяет автоматически табы на пробелы? В мейкфайле нужно вроде бы использовать именно табуляцию.

_________________
я лишь учусь


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 6:25 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
punk_joker писал(а):
Случаем редактор не заменяет автоматически табы на пробелы? В мейкфайле нужно вроде бы использовать именно табуляцию.
Действительно. Сейчас скопировал с копии svn (6900), которая лежит у меня на харде, опять ввёл команду "make", и снова безуспешно.

Пишет следующее:
make: *** No rule to make target 'Makefile.static', needed by 'hello.o'. Stop.

Что делать? :roll:

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 6:47 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
Поменял внутри файла Makefile, аргумент "Makefile.static" на Makefile.

Теперь после команды "make", пишется следующее:
Код:
kos32-gcc -c -fno-ident -O2 -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -I ~/Sandbox/sources/newlib/libc/include -o hello.o hello.c
/usr/local/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: error while loading shared libraries: libisl.so.10: cannot open shared object file: No such file or directory
Makefile:26: recipe for target 'hello.o' failed
make: *** [hello.o] Error 1

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 6:52 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1077
Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock

_________________
я лишь учусь


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 7:00 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
punk_joker писал(а):
Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock
Никак нет. Решил сначала обкатать Makefile на родном файле hello.c, который идёт в комплекте.

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
СообщениеДобавлено: Ср май 24, 2017 7:32 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 66
Нашёл в Makefile вот такие строки:
Код:
INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib
Копировал папку sdk, в папку с проектом "~/Sandbox/C/kos32".

Заменил на следующие строки:
Код:
INCLUDES= -I $(SDK_DIR)/sdk/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/sdk/lib
Но не помогло.

Вывод терминала не изменился:
Код:
kos32-gcc -c -fno-ident -O2 -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -I ~/Sandbox/C/kos32/newlib/libc/include -o hello.o hello.c
/usr/local/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: error while loading shared libraries: libisl.so.10: cannot open shared object file: No such file or directory
Makefile:26: recipe for target 'hello.o' failed
make: *** [hello.o] Error 1

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 41 сообщение ]  На страницу 1 2 3 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB