Page 1 of 3

Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Tue May 23, 2017 9:18 pm
by JohnXenox
Здравствуйте форумчане! Я новичок в программировании на С. Программировать на нем, пока что, толком не умею, поэтому заранее прошу прощения и снизхождения за нубские вопросы.

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

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Tue May 23, 2017 10:37 pm
by Siemargl
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. Начинать учиться программированию в Колибри - не самые тепличные условия.

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Tue May 23, 2017 11:34 pm
by 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)...

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 2:06 am
by JohnXenox
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:

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 2:07 am
by JohnXenox
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

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 2:49 pm
by JohnXenox
Привет всем, снова!

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

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

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 3:42 pm
by punk_joker
Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 3:46 pm
by punk_joker
punk_joker wrote:Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0
Конкретнее hello, только в параметры линковщика добавь параметр --subsystem native, если не ошибаюсь, иначе с запуском программы будет выскакивать окно консоли

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 4:40 pm
by JohnXenox
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:

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 4:52 pm
by punk_joker
Случаем редактор не заменяет автоматически табы на пробелы? В мейкфайле нужно вроде бы использовать именно табуляцию.

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 6:25 pm
by JohnXenox
punk_joker wrote:Случаем редактор не заменяет автоматически табы на пробелы? В мейкфайле нужно вроде бы использовать именно табуляцию.
Действительно. Сейчас скопировал с копии svn (6900), которая лежит у меня на харде, опять ввёл команду "make", и снова безуспешно.

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

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

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 6:47 pm
by JohnXenox
Поменял внутри файла Makefile, аргумент "Makefile.static" на Makefile.

Теперь после команды "make", пишется следующее:

Code: Select all

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

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 6:52 pm
by punk_joker
Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 7:00 pm
by JohnXenox
punk_joker wrote:Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock
Никак нет. Решил сначала обкатать Makefile на родном файле hello.c, который идёт в комплекте.

Re: Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)

Posted: Wed May 24, 2017 7:32 pm
by JohnXenox
Нашёл в Makefile вот такие строки:

Code: Select all

INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib
Копировал папку sdk, в папку с проектом "~/Sandbox/C/kos32".

Заменил на следующие строки:

Code: Select all

INCLUDES= -I $(SDK_DIR)/sdk/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/sdk/lib
Но не помогло.

Вывод терминала не изменился:

Code: Select all

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