Человеческие языки программирования

High-level languages programming questions
  • >---------------------------------------------------------
    >Libraries for MenuetOS/KolibriOS were successfully built
    >---------------------------------------------------------


    >/home/vasily/bbb/menuetlibc_new/linuxtools/mld printftest.kex main.o -n -Map printftest.kex.map
    >main.o: In function `test':
    >main.c:(.text+0xf2): undefined reference to `__stack_chk_fail'
    >/home/vasily/bbb/menuetlibc_new/lib/libc.a(putchar.o): In function `putchar':
    >putchar.c:(.text+0x4): undefined reference to `console_init'
    >putchar.c:(.text+0x18): undefined reference to `console_printf'
    >/home/vasily/bbb/menuetlibc_new/lib/libc.a(printf.o): In function `printf':
    >printf.c:(.text+0x6): undefined reference to `console_init'
    >printf.c:(.text+0x44): undefined reference to `console_printf'
    >/home/vasily/bbb/menuetlibc_new/lib/libc.a(ndoprnt.o): In function `_ndoprnt':
    >ndoprnt.c:(.text+0xb26): undefined reference to `__stack_chk_fail'
    >/home/vasily/bbb/menuetlibc_new/lib/libc.a(doprnt.o): In function `_doprnt':
    >doprnt.c:(.text+0xa5e): undefined reference to `__stack_chk_fail'
    >objcopy printftest.kex -O binary
    >objcopy: 'printftest.kex': No such file
    >make[2]: *** [printftest.kex] Error 1
    >make[2]: Leaving directory `/home/vasily/bbb/menuetlibc_new/programs/binclock'
    >make[1]: *** [all] Error 2
    >make[1]: Leaving directory `/home/vasily/bbb/menuetlibc_new/programs'
    >make: *** [all] Error 2
    >vasily@vasily-desktop:~/bbb/menuetlibc_new$


    Как видите, библы собрал, остались бонус-приблуды.
    На стадии линковки чего-то там вышли одни undefined reference` ы + отсутствует файл.
  • Я добавлял в menuetlibc новые функции. В частности putchar() printf(). Обе эти функции для вывода в консоль используют экспортируемые функции из файла console.o Сам console.asm написан на ассемблере и компилируется FASM-ом. Я почему-то забыл добавить в исходники menuetlibc файл console.asm .В общем вот этот файл(реализация не самая лучшая, но тогда мне это было не особо важно).

    Code: Select all

    format ELF
    section '.text' executable
    
    public console_init
    public console_printf
    public console_exit
    
    align 4
    console_init:
    
            pushad
    
            mov eax,[console_init_status]
            test eax,eax
            jnz console_initializated
    
            mov [console_init_status],1
    
            mov eax,68
            mov ebx,19
            mov ecx,console_path
            int 0x40
    
            test eax,eax
            jz console_not_loaded
    
                    mov ebx,[eax+4]
                    mov [con_start],ebx
    
                    mov ebx,[eax+4+16]
                    mov [con_init],ebx
    
                    mov ebx,[eax+4+32]
                    mov [con_printf],ebx
    
                    push 1
                    call [con_start]
    
                    push caption
                    push -1
                    push -1
                    push -1
                    push -1
                    call [con_init]
    
            console_not_loaded:
    
            console_initializated:
    
            popad
    
            ret
    
    align 4
    console_printf:
    
            pop [return_addres]
    
            call [con_printf]
            ;add esp,8
    
            push [return_addres]
    
            ret
    
    align 4
    console_exit:
    
            push 0
            call [con_exit]
    
            ret
    
    
    ;-----------------------------
    console_path db '/sys/lib/console.obj',0
    caption      db 'Console',0
    
    align 4
    con_start                 rd 1
    con_init                  rd 1
    con_printf                rd 1
    con_exit                  rd 1
    console_init_status       rd 1
    return_addres             rd 1
    нужно добавить его к статической библиотеке libc.a либо прописать в makefile, чтобы он компилировался и линковался к libc.a
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Не было printf - кошмар. Реализация многих функций этой libc оставляет желать лучшего. Так что вам местный товарищи скажут спасибо. Хорошо.
  • Что тут плохо а что хорошо, тут и так все прекрасно знают. А твоё редкое умение замечать очевидные вещи и так всех напрягает.
    Я тебе повторю - хочешь лучше - напиши лучше.
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 4 guests