GCC console hello world
Posted: Sat Jun 27, 2015 11:46 pm
Пытаюсь скросскомпилировать простейший Hello world под KolibriOS. Бинарник даже получается, kpack его жмёт. Вариант номер раз:
Вариант номер два:
Лог сборки:
При двойном клике по бинарнику в Eolite ничего не происходит. При запуске оттуда же через Shell получаю что-то типа:
Попытался отдать оба бинарника в MTDBG. Загружаются через load корректно, после нажатия "g" пишет одну и ту же ошибку:
Что нужно исправить, что бы Hello world заработал?
Code: Select all
#include <stdio.h>
int main(){
printf("Hell %d word!\n", 66);
return 0;
}
Spoiler:
Code: Select all
#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;
}
Code: Select all
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
Code: Select all
'/usbhd0/1/Kolibri/hellword.kex' запущен. PID = 51.
Code: Select all
Debugged program caused an exception 0E. (Page fault)
Suspended