C + KolibriOS.lib

High-level languages programming questions
  • У тебя еще есть доступ к kolibri-n.org?
    Буду благодарен если зальешь.
    Из хаоса в космос
  • Leency, добавить пример можно.
    Насчёт описания к нему — не знаю, может нужно что-то уточнить.
    Хорошо бы кто-то ещё попробовал. (Например, ты пробовал BigSample http://board.kolibrios.org/viewtopic.php?f=2&t=3587 , и у тебя он собрался и работал.)

    Другие компиляторы декорируют stdcall функции.

    Например, Open Watcom по умолчанию декорирует stdcall функции, добавляя перед
    именем функции знак подчёркивания и суффикс "@size" после имени _FunctionName@size.

    Существует флаг компилятора

    Code: Select all

    zz remove "@size" from __stdcall function names 
    но вот флага, убирающего подчёркивание я не нашёл.

    Можно решить вопрос добавлением такой прагмы в исходный код

    Code: Select all

    #pragma aux __stdcall "*" 
    В GCC наоборот, есть -fno-leading-underscore(убирает подчёркивание),
    но флаг убирающий "@size" -kill-at работают только для dll. C dlltool аналогично.
    С MSVC похоже тоже есть такая проблема.

    Не хотелось бы изобретать велосипед, нужно всего лишь -kill-at и -fno-leading-underscore но чтобы работало для объектных файлов MSCOFF, а не только для dll.
    Я, конечно, поискал немного в сети. Некоторые советуют сделать dll и вызывать функции оттуда, некоторые советуют сделать def-файл(это дополнительная работа, функций может быть 100500).
    Но немало тех, кому нужно было прилинковать именно объектник, а dll и def-файл по каким-то причинам не подходят.

    Ну в общем, я ещё немного поищу, если не найду, то придётся сделать для этого мини тулзу.
    В принципе прогуляться по таблице символов — это не проблема, именно это и происходит в утилите CoffDump http://board.kolibrios.org/viewtopic.php?f=9&t=3577
    Думаю, что это могло бы пригодиться даже не только здесь для KolibriOS.

    Вот так я собирал с помощью Open Watcom

    Code: Select all

    Set NAME=test
    WCC386 -s %NAME%.c
    LINK -edit %NAME%.obj
    LD -T LScript.x %NAME%.obj -o %NAME%.kex -L %KolibriOS% -l KolibriOS
    OBJCOPY -O binary -j .all %NAME%.kex
    ключ -s для компилятора WCC386 означает "remove stack overflow checks".

    LScript в данном случае немного другой, так как компилятор WCC386 создаёт секции с другими названиями(CONST, CONST2) и
    функция Main имеет в конце знак подчёркивания Main_
    Downloaded 355 times
  • BigSample я когда-то пробовал и он у меня собирался.
    Из хаоса в космос
  • Чтобы собрать пример на Си с помощью GCC/MSVC была создана крохотная утилита KillAt http://board.kolibrios.org/viewtopic.php?f=2&t=3673

    Если использовать ключ -fno-leading-underscore для GCC, то
    в линкер-скрипте LScript вместо "_Main" следует использовать "Main".
    Потом вызвать KillAt без ключей, вот так:

    Code: Select all

    GCC -fno-leading-underscore -c %NAME%.c -o %NAME%.obj
    KillAt %NAME%.obj
    Или можно запустить утилиту KillAt с ключом -L

    Code: Select all

    GCC -c %NAME%.c -o %NAME%.obj
    KillAt -L %NAME%.obj
    для MSVC должно быть аналогично.
    Attachments
    Downloaded 356 times
  • Who is online

    Users browsing this forum: No registered users and 6 guests