Здравствуйте форумчане! Я новичок в программировании на С. Программировать на нем, пока что, толком не умею, поэтому заранее прошу прощения и снизхождения за нубские вопросы.
Нашел 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.
Минимальная граф. программа для Колибри без лишних зависимостей на C (gcc, Linux)
-
The Glass is Always Half Full!
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. Начинать учиться программированию в Колибри - не самые тепличные условия.
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. Начинать учиться программированию в Колибри - не самые тепличные условия.
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)...
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
Ответ не ясен. То есть, мне надо распаковать архив x86_64-linux-kos32-5.4.0.7z в подходящую папку, например "usr/local", дальше прописать путь в "etc/environment" к "usr/local/win32"? Но в папке win32, много папок с файлами. Они автоматически подхватятся?Siemargl wrote:1. развернуть архив чтобы бинарники kos32-gcc были доступны в пути
Ясно. Просто хочется минимализма. Не хочется делать как в Linux, где ставишь маленькую программу, а она за собой, грубо говоря, тянет +100500 монструозых библиотек, после чего в системе начинаются тормоза и перерасход оперативной памяти.Siemargl wrote:2. newlib (klib для tinyc) это стандартная библиотека ф-ций. Вкратце - язык С плюс библиотека составляют единое целое и покрывается описанием ANSI стандарта, и отказываться от нее просто так неразумно.
Без нее обойтись можно, но это не начинающий уровень, поскольку некоторые функции используются еще при загрузке/выгрузке программы (до main() и после). В большинстве случаев это маловажно, поскольку линкер С выбросит из результирующего бинарника неиспользуемый библиотечный код (для С++ ему отследить зависимости сложнее - бинарники толще)
Спасибо, посмотрю.Siemargl wrote:Примеры и строки компиляции есть в статейках.
Практически минимальные граф программы:
http://websvn.kolibrios.org/filedetails ... e%2Fmain.c для gcc
http://websvn.kolibrios.org/filedetails ... inbasics.c для tcc
Как сделаны вызовы системных функций - см в kos32sys.h - маленькие ассемблерные обертки.
Погуглил на счёт этих компиляторов, понял, что С-- не хочу, он не развивается, да и с кросс-платформенностью беда. TinyC (он же tcc) тоже толком не развивается (последняя версия 0.9.26 выпущена в 2013). Если gcc для Kolibri не осилю, то тогда попробую TinyC.Siemargl wrote:Можно в итоге:
1. Использовать TinyC внутри Колибри без кросс-компиляции - это проще, но не очень удобно - пока нет программерского удобного редактора.
2. Можно не забывать про С-- в нем в принципе отсутствует стандартная библиотека и будет самый компактный код. Тоже работает внутри Колибри.
Минимальный пример http://websvn.kolibrios.org/filedetails ... template.c
3. gcc это очень мощный инструмент - полноценный компилятор С и С++ - но и возиться придется больше - кросс компиляция сложнее.
Ничего страшного, с детства расту в спартанских условиях.Siemargl wrote:P.S. Начинать учиться программированию в Колибри - не самые тепличные условия.
The Glass is Always Half Full!
Thanks, I'll take a look.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)...
The Glass is Always Half Full!
Привет всем, снова!
Распаковал архив "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
Помогите пожалуйста. Что я делаю не так? Как откомпилировать программу?
Распаковал архив "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!
Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0
to infinity and beyond
Конкретнее hello, только в параметры линковщика добавь параметр --subsystem native, если не ошибаюсь, иначе с запуском программы будет выскакивать окно консолиpunk_joker wrote:Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0
to infinity and beyond
Скопировал с svn этот hello.c и Makefile.static (переименовал его в Makefile, иначе не работает) в папку "~/Sandbox/C/kos32".punk_joker wrote:Конкретнее hello, только в параметры линковщика добавь параметр --subsystem native, если не ошибаюсь, иначе с запуском программы будет выскакивать окно консолиpunk_joker wrote:Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0
Сделал так в терминале:
cd ~/Sandbox/C/kos32
make
но не работает, пишет:
Makefile:22: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
Что не так?
The Glass is Always Half Full!
Случаем редактор не заменяет автоматически табы на пробелы? В мейкфайле нужно вроде бы использовать именно табуляцию.
to infinity and beyond
Действительно. Сейчас скопировал с копии svn (6900), которая лежит у меня на харде, опять ввёл команду "make", и снова безуспешно.punk_joker wrote:Случаем редактор не заменяет автоматически табы на пробелы? В мейкфайле нужно вроде бы использовать именно табуляцию.
Пишет следующее:
make: *** No rule to make target 'Makefile.static', needed by 'hello.o'. Stop.
Что делать?
The Glass is Always Half Full!
Поменял внутри файла Makefile, аргумент "Makefile.static" на Makefile.
Теперь после команды "make", пишется следующее:
Теперь после команды "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
The Glass is Always Half Full!
Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock
to infinity and beyond
Никак нет. Решил сначала обкатать Makefile на родном файле hello.c, который идёт в комплекте.punk_joker wrote:Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock
The Glass is Always Half Full!
Нашёл в Makefile вот такие строки:
Копировал папку sdk, в папку с проектом "~/Sandbox/C/kos32".
Заменил на следующие строки:Но не помогло.
Вывод терминала не изменился:
Code: Select all
INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib
Заменил на следующие строки:
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
The Glass is Always Half Full!
Who is online
Users browsing this forum: No registered users and 4 guests