Closed gabrielhom closed 2 years ago
Ok ... desculpe ... no momento eu so tenho uma maquina velha ... ela esta rodando com o ubuntu 18.4 e o gcc eh antigo ... quero fazer ele compilar em mais maquinas e mais sistemas.
Olhando so o exemplo dado, me da a impressao que nesse programa ai, o bl.bin tem que colocar aquelas diretivas '#ifndef XXX' nos headers.
Voi colocar essas diretivas ... eh que o boot loader nao eh uma coisa que a gente mexe o tempo todo ... faltou isso.
tambem pretendo no futuro colocar algumas dessas variaveis dentro o arquivo .c e usar extern no header.
Então, eu adicionei o include guard e o problema no linker continua. Porém se eu adicionar -fcommon nas CFLAGS do gramado/boot/x86/2bl/Makefile ele consegue linkar. Mas em seguida eu caio no mesmo problema na pasta gramado/landos/kernel
...
ld: sins.o:(.bss+0x51b24): múltiplas definições de "_KernelClasses"; main.o:(.bss+0x51b24): definido primeiro aqui
ld: sins.o:(.bss+0x51b28): múltiplas definições de "_Platform"; main.o:(.bss+0x51b28): definido primeiro aqui
make[1]: *** [Makefile:417: link-kernel] Erro 1
make[1]: Saindo do diretório '/home/gabriel/git/gramado/landos/kernel'
make: *** [Makefile:145: land-os] Erro 2
Já na parte do setup nem com -fcommon na compilação de todos os objects resolveu.
#::setup
make -C gramado/setup/
make[1]: Entrando no diretório '/home/gabriel/git/gramado/gramado/setup'
make -C launcher
make[2]: Entrando no diretório '/home/gabriel/git/gramado/gramado/setup/launcher'
cp ../../../landlib/rtl/obj/crt0.o .
cp ../../../landlib/rtl/obj/ctype.o .
cp ../../../landlib/rtl/obj/stdio.o .
cp ../../../landlib/rtl/obj/stdlib.o .
cp ../../../landlib/rtl/obj/string.o .
cp ../../../landlib/rtl/obj/time.o .
cp ../../../landlib/rtl/obj/unistd.o .
cp ../../../landlib/rtl/obj/termios.o .
cp ../../../landlib/rtl/obj/ioctl.o .
cp ../../../landlib/rtl/obj/fcntl.o .
cp ../../../landlib/rtl/obj/rtl.o .
cp ../../../landlib/libcore/obj/api.o .
ld -m elf_i386 -T ../link.ld -o LAUNCHER.BIN crt0.o main.o ctype.o stdlib.o stdio.o string.o unistd.o api.o status.o addrbar.o termios.o ioctl.o fcntl.o rtl.o
ld: status.o:(.bss+0x0): múltiplas definições de "_HEAP_START"; main.o:(.bss+0x0): definido primeiro aqui
ld: status.o:(.bss+0x4): múltiplas definições de "_HEAP_END"; main.o:(.bss+0x4): definido primeiro aqui
ld: status.o:(.bss+0x8): múltiplas definições de "_HEAP_SIZE"; main.o:(.bss+0x8): definido primeiro aqui
ld: status.o:(.bss+0xc): múltiplas definições de "_heapCount"; main.o:(.bss+0xc): definido primeiro aqui
ld: status.o:(.bss+0x10): múltiplas definições de "_heap_start"; main.o:(.bss+0x10): definido primeiro aqui
ld: status.o:(.bss+0x14): múltiplas definições de "_heap_end"; main.o:(.bss+0x14): definido primeiro aqui
ld: status.o:(.bss+0x18): múltiplas definições de "_g_heap_pointer"; main.o:(.bss+0x18): definido primeiro aqui
ld: status.o:(.bss+0x1c): múltiplas definições de "_g_available_heap"; main.o:(.bss+0x1c): definido primeiro aqui
ld: status.o:(.bss+0x20): múltiplas definições de "_Heap"; main.o:(.bss+0x20): definido primeiro aqui
ld: status.o:(.bss+0x24): múltiplas definições de "_libcHeap"; main.o:(.bss+0x24): definido primeiro aqui
ld: status.o:(.bss+0x40): múltiplas definições de "_heapList"; main.o:(.bss+0x40): definido primeiro aqui
ld: status.o:(.bss+0x440): múltiplas definições de "___libc_tty_id"; main.o:(.bss+0x440): definido primeiro aqui
ld: status.o:(.bss+0x444): múltiplas definições de "_stdin"; main.o:(.bss+0x444): definido primeiro aqui
ld: status.o:(.bss+0x448): múltiplas definições de "_stdout"; main.o:(.bss+0x448): definido primeiro aqui
ld: status.o:(.bss+0x44c): múltiplas definições de "_stderr"; main.o:(.bss+0x44c): definido primeiro aqui
ld: status.o:(.bss+0x460): múltiplas definições de "_Streams"; main.o:(.bss+0x460): definido primeiro aqui
ld: status.o:(.bss+0x4e0): múltiplas definições de "_g_cursor_x"; main.o:(.bss+0x4e0): definido primeiro aqui
ld: status.o:(.bss+0x4e4): múltiplas definições de "_g_cursor_y"; main.o:(.bss+0x4e4): definido primeiro aqui
ld: status.o:(.bss+0x4e8): múltiplas definições de "_g_char_attrib"; main.o:(.bss+0x4e8): definido primeiro aqui
ld: status.o:(.bss+0x4ec): múltiplas definições de "_g_columns"; main.o:(.bss+0x4ec): definido primeiro aqui
ld: status.o:(.bss+0x4f0): múltiplas definições de "_g_rows"; main.o:(.bss+0x4f0): definido primeiro aqui
ld: status.o:(.bss+0x4f4): múltiplas definições de "_g_using_gui"; main.o:(.bss+0x4f4): definido primeiro aqui
ld: status.o:(.bss+0x500): múltiplas definições de "_prompt"; main.o:(.bss+0x500): definido primeiro aqui
ld: status.o:(.bss+0x900): múltiplas definições de "_prompt_out"; main.o:(.bss+0x900): definido primeiro aqui
ld: status.o:(.bss+0xd00): múltiplas definições de "_prompt_err"; main.o:(.bss+0xd00): definido primeiro aqui
ld: status.o:(.bss+0x1100): múltiplas definições de "_prompt_pos"; main.o:(.bss+0x1100): definido primeiro aqui
ld: status.o:(.bss+0x1104): múltiplas definições de "_prompt_max"; main.o:(.bss+0x1104): definido primeiro aqui
ld: status.o:(.bss+0x1108): múltiplas definições de "_prompt_status"; main.o:(.bss+0x1108): definido primeiro aqui
ld: status.o:(.bss+0x1120): múltiplas definições de "_LibCoreEventBuffer"; main.o:(.bss+0x1120): definido primeiro aqui
ld: status.o:(.bss+0x11a0): múltiplas definições de "_ApplicationInfo"; main.o:(.bss+0x11a0): definido primeiro aqui
ld: status.o:(.bss+0x11a4): múltiplas definições de "_BufferInfo"; main.o:(.bss+0x11a4): definido primeiro aqui
ld: status.o:(.bss+0x11a8): múltiplas definições de "_ClientAreaInfo"; main.o:(.bss+0x11a8): definido primeiro aqui
ld: status.o:(.bss+0x11ac): múltiplas definições de "_CursorInfo"; main.o:(.bss+0x11ac): definido primeiro aqui
ld: status.o:(.bss+0x11b0): múltiplas definições de "_CurrentWindow"; main.o:(.bss+0x11b0): definido primeiro aqui
ld: status.o:(.bss+0x11b4): múltiplas definições de "_current_semaphore"; main.o:(.bss+0x11b4): definido primeiro aqui
ld: status.o:(.bss+0x11b8): múltiplas definições de "_STATUSBAR"; main.o:(.bss+0x11b8): definido primeiro aqui
ld: status.o:(.bss+0x11cc): múltiplas definições de "_TOPBAR"; main.o:(.bss+0x11cc): definido primeiro aqui
ld: addrbar.o:(.bss+0x0): múltiplas definições de "_HEAP_START"; main.o:(.bss+0x0): definido primeiro aqui
ld: addrbar.o:(.bss+0x4): múltiplas definições de "_HEAP_END"; main.o:(.bss+0x4): definido primeiro aqui
ld: addrbar.o:(.bss+0x8): múltiplas definições de "_HEAP_SIZE"; main.o:(.bss+0x8): definido primeiro aqui
ld: addrbar.o:(.bss+0xc): múltiplas definições de "_heapCount"; main.o:(.bss+0xc): definido primeiro aqui
ld: addrbar.o:(.bss+0x10): múltiplas definições de "_heap_start"; main.o:(.bss+0x10): definido primeiro aqui
ld: addrbar.o:(.bss+0x14): múltiplas definições de "_heap_end"; main.o:(.bss+0x14): definido primeiro aqui
ld: addrbar.o:(.bss+0x18): múltiplas definições de "_g_heap_pointer"; main.o:(.bss+0x18): definido primeiro aqui
ld: addrbar.o:(.bss+0x1c): múltiplas definições de "_g_available_heap"; main.o:(.bss+0x1c): definido primeiro aqui
ld: addrbar.o:(.bss+0x20): múltiplas definições de "_Heap"; main.o:(.bss+0x20): definido primeiro aqui
ld: addrbar.o:(.bss+0x24): múltiplas definições de "_libcHeap"; main.o:(.bss+0x24): definido primeiro aqui
ld: addrbar.o:(.bss+0x40): múltiplas definições de "_heapList"; main.o:(.bss+0x40): definido primeiro aqui
ld: addrbar.o:(.bss+0x440): múltiplas definições de "___libc_tty_id"; main.o:(.bss+0x440): definido primeiro aqui
ld: addrbar.o:(.bss+0x444): múltiplas definições de "_stdin"; main.o:(.bss+0x444): definido primeiro aqui
ld: addrbar.o:(.bss+0x448): múltiplas definições de "_stdout"; main.o:(.bss+0x448): definido primeiro aqui
ld: addrbar.o:(.bss+0x44c): múltiplas definições de "_stderr"; main.o:(.bss+0x44c): definido primeiro aqui
ld: addrbar.o:(.bss+0x460): múltiplas definições de "_Streams"; main.o:(.bss+0x460): definido primeiro aqui
ld: addrbar.o:(.bss+0x4e0): múltiplas definições de "_g_cursor_x"; main.o:(.bss+0x4e0): definido primeiro aqui
ld: addrbar.o:(.bss+0x4e4): múltiplas definições de "_g_cursor_y"; main.o:(.bss+0x4e4): definido primeiro aqui
ld: addrbar.o:(.bss+0x4e8): múltiplas definições de "_g_char_attrib"; main.o:(.bss+0x4e8): definido primeiro aqui
ld: addrbar.o:(.bss+0x4ec): múltiplas definições de "_g_columns"; main.o:(.bss+0x4ec): definido primeiro aqui
ld: addrbar.o:(.bss+0x4f0): múltiplas definições de "_g_rows"; main.o:(.bss+0x4f0): definido primeiro aqui
ld: addrbar.o:(.bss+0x4f4): múltiplas definições de "_g_using_gui"; main.o:(.bss+0x4f4): definido primeiro aqui
ld: addrbar.o:(.bss+0x500): múltiplas definições de "_prompt"; main.o:(.bss+0x500): definido primeiro aqui
ld: addrbar.o:(.bss+0x900): múltiplas definições de "_prompt_out"; main.o:(.bss+0x900): definido primeiro aqui
ld: addrbar.o:(.bss+0xd00): múltiplas definições de "_prompt_err"; main.o:(.bss+0xd00): definido primeiro aqui
ld: addrbar.o:(.bss+0x1100): múltiplas definições de "_prompt_pos"; main.o:(.bss+0x1100): definido primeiro aqui
ld: addrbar.o:(.bss+0x1104): múltiplas definições de "_prompt_max"; main.o:(.bss+0x1104): definido primeiro aqui
ld: addrbar.o:(.bss+0x1108): múltiplas definições de "_prompt_status"; main.o:(.bss+0x1108): definido primeiro aqui
ld: addrbar.o:(.bss+0x1120): múltiplas definições de "_LibCoreEventBuffer"; main.o:(.bss+0x1120): definido primeiro aqui
ld: addrbar.o:(.bss+0x11a0): múltiplas definições de "_ApplicationInfo"; main.o:(.bss+0x11a0): definido primeiro aqui
ld: addrbar.o:(.bss+0x11a4): múltiplas definições de "_BufferInfo"; main.o:(.bss+0x11a4): definido primeiro aqui
ld: addrbar.o:(.bss+0x11a8): múltiplas definições de "_ClientAreaInfo"; main.o:(.bss+0x11a8): definido primeiro aqui
ld: addrbar.o:(.bss+0x11ac): múltiplas definições de "_CursorInfo"; main.o:(.bss+0x11ac): definido primeiro aqui
ld: addrbar.o:(.bss+0x11b0): múltiplas definições de "_CurrentWindow"; main.o:(.bss+0x11b0): definido primeiro aqui
ld: addrbar.o:(.bss+0x11b4): múltiplas definições de "_current_semaphore"; main.o:(.bss+0x11b4): definido primeiro aqui
ld: addrbar.o:(.bss+0x11b8): múltiplas definições de "_STATUSBAR"; main.o:(.bss+0x11b8): definido primeiro aqui
ld: addrbar.o:(.bss+0x11cc): múltiplas definições de "_TOPBAR"; main.o:(.bss+0x11cc): definido primeiro aqui
ld: aviso: não foi possível localizar símbolo de entrada __user_app__; usando o padrão 0000000000401000
make[2]: *** [Makefile:101: gfe-link] Erro 1
make[2]: Saindo do diretório '/home/gabriel/git/gramado/gramado/setup/launcher'
make[1]: *** [Makefile:5: all] Erro 2
make[1]: Saindo do diretório '/home/gabriel/git/gramado/gramado/setup'
make: *** [Makefile:185: gramado-setup] Erro 2
O problema parece ser realmente o que eu falei ... ta faltando diretivas do preprocessador para multiplas definiçoes.
veja esse ultimo commit https://github.com/frednora/gramado/commit/08d0cd015b7faa75144330715b1a9055a76da97f
O problema parece ser realmente o que eu falei ... ta faltando diretivas do preprocessador mara multiplas definiçoes.
Mas então por que em alguns casos o -fcommon resolveu? Esse erro é bem estranho mesmo, eu já encarei ele em um projeto recente meu, até impliquei com o #pragma once e passei um tempo trocando todos os include guards e mesmo assim continuava, só resolveu usando -fcommon e depois adicionando extern às variáveis.
Vou dar um pull aqui e tentar novamente. Mais tarde posso tentar com outra versão do GCC também, atualmente estou usando o
gcc --version
gcc (GCC) 10.2.1 20201125 (Red Hat 10.2.1-9)
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
veja esse ultimo commit 08d0cd0
Mesmo erro do início, acredito que o problema são as "frescuras do GCC 10" mesmo.
Já na parte do setup nem com -fcommon na compilação de todos os objects resolveu.
#::setup make -C gramado/setup/ make[1]: Entrando no diretório '/home/gabriel/git/gramado/gramado/setup' make -C launcher make[2]: Entrando no diretório '/home/gabriel/git/gramado/gramado/setup/launcher' cp ../../../landlib/rtl/obj/crt0.o . cp ../../../landlib/rtl/obj/ctype.o . cp ../../../landlib/rtl/obj/stdio.o . cp ../../../landlib/rtl/obj/stdlib.o . cp ../../../landlib/rtl/obj/string.o . cp ../../../landlib/rtl/obj/time.o . cp ../../../landlib/rtl/obj/unistd.o . cp ../../../landlib/rtl/obj/termios.o . cp ../../../landlib/rtl/obj/ioctl.o . cp ../../../landlib/rtl/obj/fcntl.o . cp ../../../landlib/rtl/obj/rtl.o . cp ../../../landlib/libcore/obj/api.o . ld -m elf_i386 -T ../link.ld -o LAUNCHER.BIN crt0.o main.o ctype.o stdlib.o stdio.o string.o unistd.o api.o status.o addrbar.o termios.o ioctl.o fcntl.o rtl.o ld: status.o:(.bss+0x0): múltiplas definições de "_HEAP_START"; main.o:(.bss+0x0): definido primeiro aqui ld: status.o:(.bss+0x4): múltiplas definições de "_HEAP_END"; main.o:(.bss+0x4): definido primeiro aqui ld: status.o:(.bss+0x8): múltiplas definições de "_HEAP_SIZE"; main.o:(.bss+0x8): definido primeiro aqui ld: status.o:(.bss+0xc): múltiplas definições de "_heapCount"; main.o:(.bss+0xc): definido primeiro aqui ld: status.o:(.bss+0x10): múltiplas definições de "_heap_start"; main.o:(.bss+0x10): definido primeiro aqui ld: status.o:(.bss+0x14): múltiplas definições de "_heap_end"; main.o:(.bss+0x14): definido primeiro aqui ld: status.o:(.bss+0x18): múltiplas definições de "_g_heap_pointer"; main.o:(.bss+0x18): definido primeiro aqui ld: status.o:(.bss+0x1c): múltiplas definições de "_g_available_heap"; main.o:(.bss+0x1c): definido primeiro aqui ld: status.o:(.bss+0x20): múltiplas definições de "_Heap"; main.o:(.bss+0x20): definido primeiro aqui ld: status.o:(.bss+0x24): múltiplas definições de "_libcHeap"; main.o:(.bss+0x24): definido primeiro aqui ld: status.o:(.bss+0x40): múltiplas definições de "_heapList"; main.o:(.bss+0x40): definido primeiro aqui ld: status.o:(.bss+0x440): múltiplas definições de "___libc_tty_id"; main.o:(.bss+0x440): definido primeiro aqui ld: status.o:(.bss+0x444): múltiplas definições de "_stdin"; main.o:(.bss+0x444): definido primeiro aqui ld: status.o:(.bss+0x448): múltiplas definições de "_stdout"; main.o:(.bss+0x448): definido primeiro aqui ld: status.o:(.bss+0x44c): múltiplas definições de "_stderr"; main.o:(.bss+0x44c): definido primeiro aqui ld: status.o:(.bss+0x460): múltiplas definições de "_Streams"; main.o:(.bss+0x460): definido primeiro aqui ld: status.o:(.bss+0x4e0): múltiplas definições de "_g_cursor_x"; main.o:(.bss+0x4e0): definido primeiro aqui ld: status.o:(.bss+0x4e4): múltiplas definições de "_g_cursor_y"; main.o:(.bss+0x4e4): definido primeiro aqui ld: status.o:(.bss+0x4e8): múltiplas definições de "_g_char_attrib"; main.o:(.bss+0x4e8): definido primeiro aqui ld: status.o:(.bss+0x4ec): múltiplas definições de "_g_columns"; main.o:(.bss+0x4ec): definido primeiro aqui ld: status.o:(.bss+0x4f0): múltiplas definições de "_g_rows"; main.o:(.bss+0x4f0): definido primeiro aqui ld: status.o:(.bss+0x4f4): múltiplas definições de "_g_using_gui"; main.o:(.bss+0x4f4): definido primeiro aqui ld: status.o:(.bss+0x500): múltiplas definições de "_prompt"; main.o:(.bss+0x500): definido primeiro aqui ld: status.o:(.bss+0x900): múltiplas definições de "_prompt_out"; main.o:(.bss+0x900): definido primeiro aqui ld: status.o:(.bss+0xd00): múltiplas definições de "_prompt_err"; main.o:(.bss+0xd00): definido primeiro aqui ld: status.o:(.bss+0x1100): múltiplas definições de "_prompt_pos"; main.o:(.bss+0x1100): definido primeiro aqui ld: status.o:(.bss+0x1104): múltiplas definições de "_prompt_max"; main.o:(.bss+0x1104): definido primeiro aqui ld: status.o:(.bss+0x1108): múltiplas definições de "_prompt_status"; main.o:(.bss+0x1108): definido primeiro aqui ld: status.o:(.bss+0x1120): múltiplas definições de "_LibCoreEventBuffer"; main.o:(.bss+0x1120): definido primeiro aqui ld: status.o:(.bss+0x11a0): múltiplas definições de "_ApplicationInfo"; main.o:(.bss+0x11a0): definido primeiro aqui ld: status.o:(.bss+0x11a4): múltiplas definições de "_BufferInfo"; main.o:(.bss+0x11a4): definido primeiro aqui ld: status.o:(.bss+0x11a8): múltiplas definições de "_ClientAreaInfo"; main.o:(.bss+0x11a8): definido primeiro aqui ld: status.o:(.bss+0x11ac): múltiplas definições de "_CursorInfo"; main.o:(.bss+0x11ac): definido primeiro aqui ld: status.o:(.bss+0x11b0): múltiplas definições de "_CurrentWindow"; main.o:(.bss+0x11b0): definido primeiro aqui ld: status.o:(.bss+0x11b4): múltiplas definições de "_current_semaphore"; main.o:(.bss+0x11b4): definido primeiro aqui ld: status.o:(.bss+0x11b8): múltiplas definições de "_STATUSBAR"; main.o:(.bss+0x11b8): definido primeiro aqui ld: status.o:(.bss+0x11cc): múltiplas definições de "_TOPBAR"; main.o:(.bss+0x11cc): definido primeiro aqui ld: addrbar.o:(.bss+0x0): múltiplas definições de "_HEAP_START"; main.o:(.bss+0x0): definido primeiro aqui ld: addrbar.o:(.bss+0x4): múltiplas definições de "_HEAP_END"; main.o:(.bss+0x4): definido primeiro aqui ld: addrbar.o:(.bss+0x8): múltiplas definições de "_HEAP_SIZE"; main.o:(.bss+0x8): definido primeiro aqui ld: addrbar.o:(.bss+0xc): múltiplas definições de "_heapCount"; main.o:(.bss+0xc): definido primeiro aqui ld: addrbar.o:(.bss+0x10): múltiplas definições de "_heap_start"; main.o:(.bss+0x10): definido primeiro aqui ld: addrbar.o:(.bss+0x14): múltiplas definições de "_heap_end"; main.o:(.bss+0x14): definido primeiro aqui ld: addrbar.o:(.bss+0x18): múltiplas definições de "_g_heap_pointer"; main.o:(.bss+0x18): definido primeiro aqui ld: addrbar.o:(.bss+0x1c): múltiplas definições de "_g_available_heap"; main.o:(.bss+0x1c): definido primeiro aqui ld: addrbar.o:(.bss+0x20): múltiplas definições de "_Heap"; main.o:(.bss+0x20): definido primeiro aqui ld: addrbar.o:(.bss+0x24): múltiplas definições de "_libcHeap"; main.o:(.bss+0x24): definido primeiro aqui ld: addrbar.o:(.bss+0x40): múltiplas definições de "_heapList"; main.o:(.bss+0x40): definido primeiro aqui ld: addrbar.o:(.bss+0x440): múltiplas definições de "___libc_tty_id"; main.o:(.bss+0x440): definido primeiro aqui ld: addrbar.o:(.bss+0x444): múltiplas definições de "_stdin"; main.o:(.bss+0x444): definido primeiro aqui ld: addrbar.o:(.bss+0x448): múltiplas definições de "_stdout"; main.o:(.bss+0x448): definido primeiro aqui ld: addrbar.o:(.bss+0x44c): múltiplas definições de "_stderr"; main.o:(.bss+0x44c): definido primeiro aqui ld: addrbar.o:(.bss+0x460): múltiplas definições de "_Streams"; main.o:(.bss+0x460): definido primeiro aqui ld: addrbar.o:(.bss+0x4e0): múltiplas definições de "_g_cursor_x"; main.o:(.bss+0x4e0): definido primeiro aqui ld: addrbar.o:(.bss+0x4e4): múltiplas definições de "_g_cursor_y"; main.o:(.bss+0x4e4): definido primeiro aqui ld: addrbar.o:(.bss+0x4e8): múltiplas definições de "_g_char_attrib"; main.o:(.bss+0x4e8): definido primeiro aqui ld: addrbar.o:(.bss+0x4ec): múltiplas definições de "_g_columns"; main.o:(.bss+0x4ec): definido primeiro aqui ld: addrbar.o:(.bss+0x4f0): múltiplas definições de "_g_rows"; main.o:(.bss+0x4f0): definido primeiro aqui ld: addrbar.o:(.bss+0x4f4): múltiplas definições de "_g_using_gui"; main.o:(.bss+0x4f4): definido primeiro aqui ld: addrbar.o:(.bss+0x500): múltiplas definições de "_prompt"; main.o:(.bss+0x500): definido primeiro aqui ld: addrbar.o:(.bss+0x900): múltiplas definições de "_prompt_out"; main.o:(.bss+0x900): definido primeiro aqui ld: addrbar.o:(.bss+0xd00): múltiplas definições de "_prompt_err"; main.o:(.bss+0xd00): definido primeiro aqui ld: addrbar.o:(.bss+0x1100): múltiplas definições de "_prompt_pos"; main.o:(.bss+0x1100): definido primeiro aqui ld: addrbar.o:(.bss+0x1104): múltiplas definições de "_prompt_max"; main.o:(.bss+0x1104): definido primeiro aqui ld: addrbar.o:(.bss+0x1108): múltiplas definições de "_prompt_status"; main.o:(.bss+0x1108): definido primeiro aqui ld: addrbar.o:(.bss+0x1120): múltiplas definições de "_LibCoreEventBuffer"; main.o:(.bss+0x1120): definido primeiro aqui ld: addrbar.o:(.bss+0x11a0): múltiplas definições de "_ApplicationInfo"; main.o:(.bss+0x11a0): definido primeiro aqui ld: addrbar.o:(.bss+0x11a4): múltiplas definições de "_BufferInfo"; main.o:(.bss+0x11a4): definido primeiro aqui ld: addrbar.o:(.bss+0x11a8): múltiplas definições de "_ClientAreaInfo"; main.o:(.bss+0x11a8): definido primeiro aqui ld: addrbar.o:(.bss+0x11ac): múltiplas definições de "_CursorInfo"; main.o:(.bss+0x11ac): definido primeiro aqui ld: addrbar.o:(.bss+0x11b0): múltiplas definições de "_CurrentWindow"; main.o:(.bss+0x11b0): definido primeiro aqui ld: addrbar.o:(.bss+0x11b4): múltiplas definições de "_current_semaphore"; main.o:(.bss+0x11b4): definido primeiro aqui ld: addrbar.o:(.bss+0x11b8): múltiplas definições de "_STATUSBAR"; main.o:(.bss+0x11b8): definido primeiro aqui ld: addrbar.o:(.bss+0x11cc): múltiplas definições de "_TOPBAR"; main.o:(.bss+0x11cc): definido primeiro aqui ld: aviso: não foi possível localizar símbolo de entrada __user_app__; usando o padrão 0000000000401000 make[2]: *** [Makefile:101: gfe-link] Erro 1 make[2]: Saindo do diretório '/home/gabriel/git/gramado/gramado/setup/launcher' make[1]: *** [Makefile:5: all] Erro 2 make[1]: Saindo do diretório '/home/gabriel/git/gramado/gramado/setup' make: *** [Makefile:185: gramado-setup] Erro 2
Nesse erro ai falta fazer o que eu falei, mas no arquivo landlib/rtl/include/heap.h ... estou fazendo
Acabei de compilar no GCC9 com sucesso.
Acabei de compilar no GCC9 com sucesso.
Eu ja compilei ele no gcc 9 tambem ... quando estava usando o Manjaro eu acho.
Meu host eh o ubuntu 18.04.
Linux 5.4.0-42-generic x86_64
gcc (Ubuntu) 7.5.0
GNU ld (GNU Binutils for Ubuntu) 2.30
NASM version 2.13.02
Quando eu tiver mais maquinas e mais hds eu vou deixar ele preparado para mais opçoes ... Obrigado pelo feedback ... assim a gente pode ir ajustando o sistema para rodar em mais lugares.
No momento eu estou compilando com o gcc 11.2 e ligando com o ld 2.38.
Agora que estou usando o gcc 11.2 eu entendo qual foi o problema com o gcc 10 citado aqui. Nesse momento começou ser obrigatório em alguns casos que as variáveis fossem definidas em arquivos .c e importadas no header com 'extern'. Nessa época aí, algumas partes do sistema que não seguiam essa regra não passaram na compilação. Problema resolvido. :)
Várias receitas falham com diversos erros de múltiplas definições de variáveis globais. Acredito que a causa disso seja a flag "-fno-common" que agora é padrão no GCC 10.
Uma gambiarra é adicionar -fcommon às CFLAGS dos Makefiles para ter o comportamento das versões anteriores do compilador, mas pra resolver só adicionando extern às variáveis.
Documentação do GCC sobre o assunto aqui.
Exemplo dos erros no linker: