Hallo, erst einmal die Info: Nutze ich avr-gcc-9.3.0-1 wird alles korrekt gebaut dh. am Code liegt es nicht. (oder doch? :)) Seit dem Update von avr-gcc gibt mir mein Linker immer die Fehlermeldung /usr/bin/avr-ld: obj/Release/_gemeinsam/AT42QT2160.o:(.bss+0x29): multiple definition of `rx_data'; obj/Release/_gemeinsam/AMG88.o:(.bss+0x11): first defined here Diese Meldung kommt für diverse Variablen. Ich habe es nicht geprüft, aber ich denke für alle vorhandenen Variablen. Ich nutze Code Bocks unter Arch Linux Linker Optionen: -Wl,-Map=$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).map,--cref avr-gcc-10.1.0-1 gcc-10.1.0-2 gcc-libs-10.1.0-2 Freue mich über jegliche Hinweise oder Bug Reports die ich nicht finde, leider.
:
Gesperrt durch Moderator
Hi Globale Variablen im Header definiert? GCC now defaults to -fno-common. As a result, global variable accesses are more efficient on various targets. In C, global variables with multiple tentative definitions now result in linker errors. With -fcommon such definitions are silently merged during linking. Matthias
Beitrag #6285142 wurde vom Autor gelöscht.
Klemmen schrieb: > -fcommon -fcommon ist nur der Work-Around. Besser wäre es, die doppelte definition von rx_data zu vermeiden.
Yalu X. schrieb: > -fcommon ist nur der Work-Around. Besser wäre es, die doppelte > definition von rx_data zu vermeiden. Ist mir bewusst, aber um gestern weiter zu kommen wars für mich wichtig erstmal so zu leben... :) Aber wie löse ich das korrekt? Am Beispiel von rx_data: Diese ist in can.h definiert: volatile uint8_t rx_data[8]; Und wird verwendet in can.c main.c AMG88.c AT42QT2160.c sprich ich includiere can.h in main.h AMG88.h AT42QT2160.h Wie würde ich das korrekt machen?
In der can.h als extern deklarieren und in der can.c einmal anlegen
Beitrag #7410635 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.