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

High-level languages programming questions
  • У тебя не запускается именно компилятор - ищи библиотеку libisl.so.10 для gcc 5.4

    На стековерфлоу рекомендуют сходить на https://gcc.gnu.org/wiki/InstallingGCC
  • Siemargl wrote:У тебя не запускается именно компилятор - ищи библиотеку libisl.so.10 для gcc 5.4

    На стековерфлоу рекомендуют сходить на https://gcc.gnu.org/wiki/InstallingGCC
    Как раз компилятор работает.

    Попробовал сделать так:

    Code: Select all

    kos32-gcc -c -g -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -I ./sdk/sources/newlib/libc/include -o hello.o hello.c
    и компиляция прошла успешно.

    А вот линкер, линковать не хочет.
    Делаю так:

    Code: Select all

    kos32-ld -static -nostdlib -T ./sdk/sources/newlib/static.lds -Map=hello.map -L ./sdk/lib -o hello hello.o -lc -lgcc -lc
    Вывод с терминала, такой:

    Code: Select all

    kos32-ld: cannot find -lc
    kos32-ld: cannot find -lc
    Создаётся только файл "hello.map" и всё. Дальше не идёт. Что не хватает, непонятно. :(
    The Glass is Always Half Full! :mrgreen:
  • он в путях, указанных в -L ищет библиотеку libc.a (lib- и .a дописываются автоматически)
    это скомпилированная библиотека стандартных ф-ций newlib

    ключик -g лишний, т.к. отладчика С под колибри нет
    ну и для уменьшения бинарника потом применить к нему strip
  • Siemargl wrote:он в путях, указанных в -L ищет библиотеку libc.a (lib- и .a дописываются автоматически)
    это скомпилированная библиотека стандартных ф-ций newlib

    ключик -g лишний, т.к. отладчика С под колибри нет
    ну и для уменьшения бинарника потом применить к нему strip
    Понятно, но тем не менее, проблему с линкером это не решает. Видимо, это дело дохлое, поэтому перехожу на TCC. :(
    The Glass is Always Half Full! :mrgreen:
  • Вот, приложу чтобы далеко не бегать libc.a для статической линковки
    libc.dll.a для динамической - там немного другая строка будет -T app-dynamic.lds -lgcc -lc.dll

    Положить в gcc/lib.

    Это для gcc 5.4
    Attachments
    lib.zip (219.32 KiB)
    Downloaded 326 times
  • Для колибри был tcc, мне кажется для небольшого приложения это проще чем устанавливать весь пакет и выполнять необходимые настройки.
    Единственное не помню где лежит.
  • tcc лежит тут
    читать обсуждение дальше - с путями были заморочки

    Кстати, упрек в том, что он не развивается - некорректен - недавно вышла версия 0.9.27
    https://github.com/mirror/tinycc

    Только это немного другая ветка (относительно версии для Колибри), с которой непросто смержится. Да и изменения x86 почти не касаются
  • Siemargl wrote:Вот, приложу чтобы далеко не бегать libc.a для статической линковки
    libc.dll.a для динамической - там немного другая строка будет -T app-dynamic.lds -lgcc -lc.dll

    Положить в gcc/lib.

    Это для gcc 5.4
    Спасибо, но необходимости в libc.a нет, так как она включена в toolchain от Serge.
    The Glass is Always Half Full! :mrgreen:
  • Siemargl wrote:tcc лежит тут
    читать обсуждение дальше - с путями были заморочки
    Спасибо, буду посмотреть. :mrgreen:
    Siemargl wrote: Кстати, упрек в том, что он не развивается - некорректен - недавно вышла версия 0.9.27
    https://github.com/mirror/tinycc

    Только это немного другая ветка (относительно версии для Колибри), с которой непросто смержится. Да и изменения x86 почти не касаются
    Ну, я заходил на оф. сайт, а там, лежит старая версия 0.9.26 (2013). Про tcc на github, не знал, но коли так, то это чудненько. :)
    The Glass is Always Half Full! :mrgreen:
  • Unduing wrote:Для колибри был tcc, мне кажется для небольшого приложения это проще чем устанавливать весь пакет и выполнять необходимые настройки.
    Проще, но мы, лёгких путей не ищем - хардкор наше всё но оптимизации нет. :)
    The Glass is Always Half Full! :mrgreen:
  • Всё-таки решил продолжить разбираться с kos-gcc. Долго думал и понял, что линкеру "kos32-ld" не хватало библиотеки "libc.a". Надо было, прописать к ней путь в командной строке. Теперь линкует.

    В общем, строка такая:

    Code: Select all

    kos32-ld -static -nostdlib -T ./sdk/sources/newlib/static.lds -Map=hello.map -L ./sdk/lib -L /usr/local/win32/lib -o hello hello.o -lc -lgcc -lc
    Но теперь, не работает "kos32-objcopy".

    Делаю так:

    Code: Select all

    kos32-objcopy hello -O hello.kex
    Вывод с ошибкой, такой:

    Code: Select all

    kos32-objcopy:stC5GnIu: Invalid bfd target
    WTF спрашивается? :evil:
    The Glass is Always Half Full! :mrgreen:
  • kos32-objcopy hello -O binary
  • Siemargl wrote:kos32-objcopy hello -O binary
    Во имя Исаака Ньютона, спасибо! Исполняемый файл, теперь есть. :D Только что-то больно большой - 111.4K. :?
    The Glass is Always Half Full! :mrgreen:
  • перед objcopy надо делать strip - удаляет ненужную для отладки инфу

    вариант 2 - собирать с libc.dll.a (strip все= нужен)
  • Who is online

    Users browsing this forum: No registered users and 3 guests