Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт сен 22, 2017 11:08 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 2 сообщения ] 
Автор Сообщение
 Заголовок сообщения: GCC console hello world
СообщениеДобавлено: Сб июн 27, 2015 11:46 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Сб июн 27, 2015 11:29 pm
Сообщения: 1
Пытаюсь скросскомпилировать простейший Hello world под KolibriOS. Бинарник даже получается, kpack его жмёт. Вариант номер раз:
Код:
#include <stdio.h>
int main(){
   printf("Hell %d word!\n", 66);
    return 0;
}

Вариант номер два:
Спойлер: Показать
Код:
#include <string.h>

void (* _cdecl con_printf)(const char* format,...);
void (* _stdcall con_init)(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t);

#pragma pack(push,1)
typedef struct{
   char *name;
   void *data;
} kol_struct_import;
#pragma pack(pop)

void kol_exit(){
   asm ("int $0x40"::"a"(-1));
}

kol_struct_import* kol_cofflib_load(char *name){
   asm volatile ("int $0x40"::"a"(68), "b"(19), "c"(name));
}

void* kol_cofflib_procload(kol_struct_import *imp, char *name){
   int i;
   for (i=0;;i++)
      if ( NULL == ((imp+i) -> name))
         break;
      else
         if ( 0 == strcmp(name, (imp+i)->name) )
            return (imp+i)->data;
   return NULL;
}

int init_console(char* title){
   kol_struct_import *imp;

   imp = kol_cofflib_load("/sys/lib/console.obj");
   if( imp == NULL ) kol_exit();

   con_init = ( _stdcall  void (*)(unsigned, unsigned, unsigned, unsigned, const char*))
                kol_cofflib_procload (imp, "con_init");
   if( con_init == NULL ) kol_exit();

   con_printf = ( _cdecl void (*)(const char*,...))
                kol_cofflib_procload (imp, "con_printf");
   if( con_printf == NULL ) kol_exit();
   con_init(-1, -1, -1, -1, title);
   con_printf("Console inited!\n");
   return 0;
}

int main()
{
    init_console("hellWord!");
    con_printf("Hell %d word!\n", 66);
    return 0;
}

Лог сборки:
Код:
kos32-gcc.exe -Wall -O2 -I"C:\Program Files (x86)\CodeBlocks\KolibriOS\include" -c E:\work\hellWord\main.c -o obj\kolibr\main.o
kos32-ld.exe -L"C:\Program Files (x86)\CodeBlocks\KolibriOS\libc" -o bin\kolibri\hellWord.kex obj\kolibr\main.o  -s -static -nostdlib -S -Te:\Install\newlib.r5571\app.lds  -lgcc -lapp -lc.dll
kos32-objcopy.exe bin\kolibri\hellWord.kex -O binary

При двойном клике по бинарнику в Eolite ничего не происходит. При запуске оттуда же через Shell получаю что-то типа:
Код:
'/usbhd0/1/Kolibri/hellword.kex' запущен. PID = 51.

Попытался отдать оба бинарника в MTDBG. Загружаются через load корректно, после нажатия "g" пишет одну и ту же ошибку:
Код:
Debugged program caused an exception 0E. (Page fault)
Suspended

Что нужно исправить, что бы Hello world заработал?


Вложения:
Комментарий к файлу: With console.obj
hellWordCon.kex [1.68 КБ]
51 скачивание
Комментарий к файлу: Simple variant
hellWord.kex [1.31 КБ]
47 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: GCC console hello world
СообщениеДобавлено: Пн окт 05, 2015 8:36 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Явно ошибка в компиляции, исполняемый файл некорректный, возможно из-за настройки компилятора.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 2 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB