Prośba o poprawę programu

0

Witam

Napisałem ten program w 2005 roku. Kiedyś się kompilował bez problemu, ale teraz mam cos takiego:

gcc -o pjkdyno main.o about.o dyno.o disp.o press.o  `pkg-config --libs gtk+-2.0` -O2 -s 
/usr/bin/ld: about.o:(.bss+0x48): multiple definition of `kolor1'; main.o:(.bss+0x20): first defined here
/usr/bin/ld: about.o:(.bss+0x58): multiple definition of `kolor'; main.o:(.bss+0x30): first defined here
/usr/bin/ld: dyno.o:(.bss+0xd8): multiple definition of `d_speed_ent'; main.o:(.bss+0xb8): first defined here
/usr/bin/ld: dyno.o:(.bss+0xd0): multiple definition of `d_weight_ent'; main.o:(.bss+0xb0): first defined here
/usr/bin/ld: dyno.o:(.bss+0xc8): multiple definition of `d_result_ent'; main.o:(.bss+0xa8): first defined here
/usr/bin/ld: dyno.o:(.bss+0x128): multiple definition of `dyno_tbl'; main.o:(.bss+0x108): first defined here
/usr/bin/ld: dyno.o:(.bss+0xc0): multiple definition of `d_calc_button'; main.o:(.bss+0xa0): first defined here
/usr/bin/ld: dyno.o:(.bss+0x80): multiple definition of `reset_button1'; main.o:(.bss+0x60): first defined here
/usr/bin/ld: dyno.o:(.bss+0x100): multiple definition of `frame_1'; main.o:(.bss+0xe0): first defined here
/usr/bin/ld: dyno.o:(.bss+0x18): multiple definition of `l1'; main.o:(.bss+0x18): first defined here
/usr/bin/ld: dyno.o:(.bss+0x10): multiple definition of `l2'; main.o:(.bss+0x10): first defined here
/usr/bin/ld: dyno.o:(.bss+0x8): multiple definition of `l3'; main.o:(.bss+0x8): first defined here
/usr/bin/ld: dyno.o:(.bss+0x40): multiple definition of `kolor1'; main.o:(.bss+0x20): first defined here
/usr/bin/ld: dyno.o:(.bss+0x50): multiple definition of `kolor'; main.o:(.bss+0x30): first defined here

itd. Dlaczego? Kompilator: gcc 11.2.0
Program w zalaczniku.
pjkdyno-0.2.4.7z

Pozdrawiam

0

Nie wiem czy wszystko jest ok, nie testowałem zbyt dokładnie, ale udało mi się to skompilować pod gcc. Problem był ze zmiennymi globalnymi. Naprawiłem to w dość prosty sposób - wszystkie zmienne globalne w pliku dyno.h ze słówkiem extern + ich definicje w pliku dyno.c.

pjkdyno-fixed.zip

0

Dzieki Mistrzu. Ale możesz mi powiedziec czemu kiedyś bylo OK a teraz nie?

0

Symbole Ci się powtarzają, wszystko jest w błędzie linkowania. Ciężko dać wiarę, że sam to napisałeś.

2
pjk napisał(a):

Dzieki Mistrzu. Ale możesz mi powiedziec czemu kiedyś bylo OK a teraz nie?

To raczej nigdy nie było OK, po prostu kompilatory obecnie są bardziej restrykcyjne niż kiedyś i zdarza się że błędny kod który kiedyś się kompilował dziś już się nie skompiluje.

2
pjk napisał(a):

Dzieki Mistrzu. Ale możesz mi powiedziec czemu kiedyś bylo OK a teraz nie?

No możemy pozgadywać co tam się wydarzyło siedemnaście lat temu, ale to nas raczej do niczego nie doprowadzi. Ogólnie za czasów C++03 GCC dość luźno podchodził do standardu i miał domyślnie powłączane sporo swoich dodatków. Najróżniejsze rzeczy mogły przechodzić w tamtym czasie. Kompilacja MSVC byłaby lepszym wykładnikiem, zdecydowanie lepiej trzymał się standardu.

Dzisiaj, tak jak napisał @Azarien, kompilatory są bardziej restrykcyjne. Każdy większy update MSVC w moim komercyjnym systemie wiąże się z koniecznością naprawy nowych warningów, które się pojawiły.

0

Chodzi o sekcję common.

1 użytkowników online, w tym zalogowanych: 0, gości: 1