polard8 / kernel

Polar D8 kernel.
https://github.com/polard8/kernel
MIT License
646 stars 35 forks source link

Compilar: Não é possível compilar usando o GCC 10 #28

Closed gabrielhom closed 2 years ago

gabrielhom commented 3 years ago

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:

ld -m i386pe -T link.ld -o BL.BIN head.o main.o loader.o init.o ports.o x86.o stdio.o stdlib.o string.o keyboard.o pci.o hdd.o ide.o timer.o pages.o heap.o procedure.o fs.o shell.o r_render.o abort.o faults.o      
ld: loader.o:(.bss+0x0): múltiplas definições de "current_mode"; main.o:(.bss+0x0): definido primeiro aqui
ld: loader.o:(.bss+0x20): múltiplas definições de "BootBlock"; main.o:(.bss+0x20): definido primeiro aqui
ld: loader.o:(.bss+0x50): múltiplas definições de "gdefLegacyBIOSBoot"; main.o:(.bss+0x50): definido primeiro aqui
ld: loader.o:(.bss+0x54): múltiplas definições de "gdefEFIBoot"; main.o:(.bss+0x54): definido primeiro aqui
ld: loader.o:(.bss+0x58): múltiplas definições de "gdefSafeBoot"; main.o:(.bss+0x58): definido primeiro aqui
ld: loader.o:(.bss+0x5c): múltiplas definições de "gdefShowLogo"; main.o:(.bss+0x5c): definido primeiro aqui
ld: loader.o:(.bss+0x60): múltiplas definições de "gdefShowProgressBar"; main.o:(.bss+0x60): definido primeiro aqui
ld: loader.o:(.bss+0x64): múltiplas definições de "____testing_memory_size_flag"; main.o:(.bss+0x64): definido primeiro aqui
ld: loader.o:(.bss+0x68): múltiplas definições de "__last_valid_address"; main.o:(.bss+0x68): definido primeiro aqui
ld: loader.o:(.bss+0x6c): múltiplas definições de "heapCount"; main.o:(.bss+0x6c): definido primeiro aqui
ld: loader.o:(.bss+0x70): múltiplas definições de "bl_heap_start"; main.o:(.bss+0x70): definido primeiro aqui
ld: loader.o:(.bss+0x74): múltiplas definições de "bl_heap_end"; main.o:(.bss+0x74): definido primeiro aqui
ld: loader.o:(.bss+0x78): múltiplas definições de "g_heap_pointer"; main.o:(.bss+0x78): definido primeiro aqui
ld: loader.o:(.bss+0x7c): múltiplas definições de "g_available_heap"; main.o:(.bss+0x7c): definido primeiro aqui
ld: loader.o:(.bss+0x80): múltiplas definições de "mmblockCount"; main.o:(.bss+0x80): definido primeiro aqui
ld: loader.o:(.bss+0x84): múltiplas definições de "current_mmblock"; main.o:(.bss+0x84): definido primeiro aqui
ld: loader.o:(.bss+0xa0): múltiplas definições de "mmblockList"; main.o:(.bss+0xa0): definido primeiro aqui
ld: loader.o:(.bss+0x4a0): múltiplas definições de "heapList"; main.o:(.bss+0x4a0): definido primeiro aqui
ld: loader.o:(.bss+0x4c0): múltiplas definições de "bliTesting"; main.o:(.bss+0x4c0): definido primeiro aqui
ld: loader.o:(.bss+0x4c4): múltiplas definições de "g_fat16_root_status"; main.o:(.bss+0x4c4): definido primeiro aqui
ld: loader.o:(.bss+0x4c8): múltiplas definições de "g_fat16_fat_status"; main.o:(.bss+0x4c8): definido primeiro aqui
ld: loader.o:(.bss+0x4cc): múltiplas definições de "g_file_system_type"; main.o:(.bss+0x4cc): definido primeiro aqui
ld: loader.o:(.bss+0x4e0): múltiplas definições de "buffer_dir_entry"; main.o:(.bss+0x4e0): definido primeiro aqui
ld: loader.o:(.bss+0x6e0): múltiplas definições de "file_cluster_list"; main.o:(.bss+0x6e0): definido primeiro aqui
ld: loader.o:(.bss+0xee0): múltiplas definições de "partition"; main.o:(.bss+0xee0): definido primeiro aqui
ld: loader.o:(.bss+0xef0): múltiplas definições de "keyboard_queue_tail"; main.o:(.bss+0xef0): definido primeiro aqui
ld: loader.o:(.bss+0xef4): múltiplas definições de "keyboard_queue_head"; main.o:(.bss+0xef4): definido primeiro aqui
ld: loader.o:(.bss+0xef8): múltiplas definições de "keyboard_queue"; main.o:(.bss+0xef8): definido primeiro aqui
ld: loader.o:(.bss+0xf00): múltiplas definições de "keyboard_flag"; main.o:(.bss+0xf00): definido primeiro aqui
ld: loader.o:(.bss+0xf04): múltiplas definições de "ATAFlag"; main.o:(.bss+0xf04): definido primeiro aqui
ld: loader.o:(.bss+0xf20): múltiplas definições de "dev_nport"; main.o:(.bss+0xf20): definido primeiro aqui
ld: loader.o:(.bss+0xf40): múltiplas definições de "ata_pci"; main.o:(.bss+0xf40): definido primeiro aqui
ld: loader.o:(.bss+0xf74): múltiplas definições de "ata"; main.o:(.bss+0xf74): definido primeiro aqui
ld: loader.o:(.bss+0xf8c): múltiplas definições de "ata_identify_dev_buf"; main.o:(.bss+0xf8c): definido primeiro aqui
ld: loader.o:(.bss+0xf90): múltiplas definições de "ata_record_dev"; main.o:(.bss+0xf90): definido primeiro aqui
ld: loader.o:(.bss+0xf91): múltiplas definições de "ata_record_channel"; main.o:(.bss+0xf91): definido primeiro aqui
ld: loader.o:(.bss+0xf94): múltiplas definições de "g_current_ide_channel"; main.o:(.bss+0xf94): definido primeiro aqui
ld: loader.o:(.bss+0xf98): múltiplas definições de "g_current_ide_device"; main.o:(.bss+0xf98): definido primeiro aqui
ld: loader.o:(.bss+0xfa0): múltiplas definições de "ide_ports"; main.o:(.bss+0xfa0): definido primeiro aqui
ld: loader.o:(.bss+0x1000): múltiplas definições de "ide_handler_address"; main.o:(.bss+0x1000): definido primeiro aqui
ld: loader.o:(.bss+0x1020): múltiplas definições de "idechannelList"; main.o:(.bss+0x1020): definido primeiro aqui
ld: loader.o:(.bss+0x10e0): múltiplas definições de "IDE"; main.o:(.bss+0x10e0): definido primeiro aqui
ld: loader.o:(.bss+0x1100): múltiplas definições de "prompt"; main.o:(.bss+0x1100): definido primeiro aqui
ld: loader.o:(.bss+0x11fc): múltiplas definições de "prompt_pos"; main.o:(.bss+0x11fc): definido primeiro aqui
ld: loader.o:(.bss+0x1200): múltiplas definições de "g_cmd_status"; main.o:(.bss+0x1200): definido primeiro aqui
ld: loader.o:(.bss+0x1204): múltiplas definições de "g_initialized"; main.o:(.bss+0x1204): definido primeiro aqui
ld: loader.o:(.bss+0x1208): múltiplas definições de "g_driver_hdd_initialized"; main.o:(.bss+0x1208): definido primeiro aqui
ld: loader.o:(.bss+0x120c): múltiplas definições de "g_cursor_x"; main.o:(.bss+0x120c): definido primeiro aqui
ld: loader.o:(.bss+0x1210): múltiplas definições de "g_cursor_y"; main.o:(.bss+0x1210): definido primeiro aqui
ld: loader.o:(.bss+0x1214): múltiplas definições de "g_system_color"; main.o:(.bss+0x1214): definido primeiro aqui
ld: loader.o:(.bss+0x1218): múltiplas definições de "g_char_attrib"; main.o:(.bss+0x1218): definido primeiro aqui
ld: loader.o:(.bss+0x121c): múltiplas definições de "CURSOR_X"; main.o:(.bss+0x121c): definido primeiro aqui
ld: loader.o:(.bss+0x1220): múltiplas definições de "CURSOR_Y"; main.o:(.bss+0x1220): definido primeiro aqui
ld: loader.o:(.bss+0x1224): múltiplas definições de "STATUS_X"; main.o:(.bss+0x1224): definido primeiro aqui
ld: loader.o:(.bss+0x1228): múltiplas definições de "STATUS_Y"; main.o:(.bss+0x1228): definido primeiro aqui
ld: loader.o:(.bss+0x122c): múltiplas definições de "EDITBOX_X"; main.o:(.bss+0x122c): definido primeiro aqui
ld: loader.o:(.bss+0x1230): múltiplas definições de "EDITBOX_Y"; main.o:(.bss+0x1230): definido primeiro aqui
ld: loader.o:(.bss+0x1234): múltiplas definições de "EDITBOX_LARGURA"; main.o:(.bss+0x1234): definido primeiro aqui
ld: loader.o:(.bss+0x1238): múltiplas definições de "EDITBOX_ALTURA"; main.o:(.bss+0x1238): definido primeiro aqui
ld: loader.o:(.bss+0x123c): múltiplas definições de "EDITBOX_BG_COLOR"; main.o:(.bss+0x123c): definido primeiro aqui
ld: loader.o:(.bss+0x1240): múltiplas definições de "EDITBOX_TEXT_COLOR"; main.o:(.bss+0x1240): definido primeiro aqui
ld: loader.o:(.bss+0x1244): múltiplas definições de "LegacyCR3"; main.o:(.bss+0x1244): definido primeiro aqui
ld: loader.o:(.bss+0x1248): múltiplas definições de "BootLoaderCR3"; main.o:(.bss+0x1248): definido primeiro aqui
ld: loader.o:(.bss+0x124c): múltiplas definições de "useGUI"; main.o:(.bss+0x124c): definido primeiro aqui
ld: loader.o:(.bss+0x1250): múltiplas definições de "g_proc_status"; main.o:(.bss+0x1250): definido primeiro aqui
ld: loader.o:(.bss+0x1254): múltiplas definições de "g_next_app"; main.o:(.bss+0x1254): definido primeiro aqui
ld: loader.o:(.bss+0x1258): múltiplas definições de "g_next_proc"; main.o:(.bss+0x1258): definido primeiro aqui
ld: loader.o:(.bss+0x125c): múltiplas definições de "g_nova_mensagem"; main.o:(.bss+0x125c): definido primeiro aqui
ld: loader.o:(.bss+0x1260): múltiplas definições de "next_address"; main.o:(.bss+0x1260): definido primeiro aqui
ld: loader.o:(.bss+0x1264): múltiplas definições de "g_lbf_pa"; main.o:(.bss+0x1264): definido primeiro aqui
ld: loader.o:(.bss+0x1268): múltiplas definições de "g_lbf_va"; main.o:(.bss+0x1268): definido primeiro aqui
ld: loader.o:(.bss+0x126c): múltiplas definições de "system_info"; main.o:(.bss+0x126c): definido primeiro aqui
ld: loader.o:(.bss+0x1274): múltiplas definições de "VideoBlock"; main.o:(.bss+0x1274): definido primeiro aqui
ld: loader.o:(.bss+0x1290): múltiplas definições de "vesa_mode"; main.o:(.bss+0x1290): definido primeiro aqui
ld: loader.o:(.bss+0x12a0): múltiplas definições de "procedure_info"; main.o:(.bss+0x12a0): definido primeiro aqui
ld: loader.o:(.bss+0x12b0): múltiplas definições de "menu_highlight"; main.o:(.bss+0x12b0): definido primeiro aqui
ld: loader.o:(.bss+0x12c0): múltiplas definições de "MENU"; main.o:(.bss+0x12c0): definido primeiro aqui
...
make[1]: *** [Makefile:112: link-x86] Erro 1
make[1]: Saindo do diretório '/home/gabriel/git/gramado/boot/x86/2bl'

make: *** [Makefile:133: land-os] Erro 2
frednora commented 3 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.

frednora commented 3 years ago

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.

frednora commented 3 years ago

Voi colocar essas diretivas ... eh que o boot loader nao eh uma coisa que a gente mexe o tempo todo ... faltou isso.

frednora commented 3 years ago

tambem pretendo no futuro colocar algumas dessas variaveis dentro o arquivo .c e usar extern no header.

gabrielhom commented 3 years ago

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
gabrielhom commented 3 years ago

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
frednora commented 3 years ago

O problema parece ser realmente o que eu falei ... ta faltando diretivas do preprocessador para multiplas definiçoes.

frednora commented 3 years ago

veja esse ultimo commit https://github.com/frednora/gramado/commit/08d0cd015b7faa75144330715b1a9055a76da97f

gabrielhom commented 3 years ago

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.

gabrielhom commented 3 years ago

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.
gabrielhom commented 3 years ago

veja esse ultimo commit 08d0cd0

Mesmo erro do início, acredito que o problema são as "frescuras do GCC 10" mesmo.

frednora commented 3 years ago

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

gabrielhom commented 3 years ago

Acabei de compilar no GCC9 com sucesso. image

frednora commented 3 years ago

Acabei de compilar no GCC9 com sucesso. image

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.

frednora commented 2 years ago

No momento eu estou compilando com o gcc 11.2 e ligando com o ld 2.38.

frednora commented 2 years ago

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. :)