Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Apr 24, 2019 9:14 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 41 posts ]  Go to page 1 2 3 Next
Author Message
PostPosted: Tue May 23, 2017 9:18 pm 
Offline
User avatar

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

Нашел 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:


Top
   
PostPosted: Tue May 23, 2017 10:37 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 432
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. Начинать учиться программированию в Колибри - не самые тепличные условия.


Top
   
PostPosted: Tue May 23, 2017 11:34 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1247
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


Top
   
PostPosted: Wed May 24, 2017 2:06 am 
Offline
User avatar

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

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

_________________
The Glass is Always Half Full! :mrgreen:


Top
   
PostPosted: Wed May 24, 2017 2:07 am 
Offline
User avatar

Joined: Thu May 18, 2017 2:29 am
Posts: 170
hidnplayr wrote:
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:


Top
   
PostPosted: Wed May 24, 2017 2:49 pm 
Offline
User avatar

Joined: Thu May 18, 2017 2:29 am
Posts: 170
Привет всем, снова!

Распаковал архив "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:


Top
   
PostPosted: Wed May 24, 2017 3:42 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1143
Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0

_________________
я лишь учусь


Top
   
PostPosted: Wed May 24, 2017 3:46 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1143
punk_joker wrote:
Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0

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

_________________
я лишь учусь


Top
   
PostPosted: Wed May 24, 2017 4:40 pm 
Offline
User avatar

Joined: Thu May 18, 2017 2:29 am
Posts: 170
punk_joker wrote:
punk_joker wrote:
Посмотри лучше эти примеры 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:


Top
   
PostPosted: Wed May 24, 2017 4:52 pm 
Offline

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

_________________
я лишь учусь


Top
   
PostPosted: Wed May 24, 2017 6:25 pm 
Offline
User avatar

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

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

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

_________________
The Glass is Always Half Full! :mrgreen:


Top
   
PostPosted: Wed May 24, 2017 6:47 pm 
Offline
User avatar

Joined: Thu May 18, 2017 2:29 am
Posts: 170
Поменял внутри файла Makefile, аргумент "Makefile.static" на Makefile.

Теперь после команды "make", пишется следующее:
Code:
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:


Top
   
PostPosted: Wed May 24, 2017 6:52 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1143
Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock

_________________
я лишь учусь


Top
   
PostPosted: Wed May 24, 2017 7:00 pm 
Offline
User avatar

Joined: Thu May 18, 2017 2:29 am
Posts: 170
punk_joker wrote:
Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock
Никак нет. Решил сначала обкатать Makefile на родном файле hello.c, который идёт в комплекте.

_________________
The Glass is Always Half Full! :mrgreen:


Top
   
PostPosted: Wed May 24, 2017 7:32 pm 
Offline
User avatar

Joined: Thu May 18, 2017 2:29 am
Posts: 170
Нашёл в Makefile вот такие строки:
Code:
INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib
Копировал папку sdk, в папку с проектом "~/Sandbox/C/kos32".

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

Вывод терминала не изменился:
Code:
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:


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 41 posts ]  Go to page 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited