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

High-level languages programming questions
  • 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. Начинать учиться программированию в Колибри - не самые тепличные условия.
  • 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
  • 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:
  • 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:
  • Привет всем, снова!

    Распаковал архив "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:
  • Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0
    to infinity and beyond
  • punk_joker wrote:Посмотри лучше эти примеры http://websvn.kolibrios.org/listing.php ... a089ffb4f0
    Конкретнее hello, только в параметры линковщика добавь параметр --subsystem native, если не ошибаюсь, иначе с запуском программы будет выскакивать окно консоли
    to infinity and beyond
  • 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:
  • Случаем редактор не заменяет автоматически табы на пробелы? В мейкфайле нужно вроде бы использовать именно табуляцию.
    to infinity and beyond
  • 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:
  • Поменял внутри файла 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
    The Glass is Always Half Full! :mrgreen:
  • Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock
    to infinity and beyond
  • punk_joker wrote:Имя файла binclock.c? Если да, то следует отредактировать мейкфайл, все упоминания hello заменить на имя нужного файла, в данном случае binclock
    Никак нет. Решил сначала обкатать Makefile на родном файле hello.c, который идёт в комплекте.
    The Glass is Always Half Full! :mrgreen:
  • Нашёл в 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
    The Glass is Always Half Full! :mrgreen:
  • Who is online

    Users browsing this forum: No registered users and 3 guests