Ошибка компиляции с использованием arduino-mk в Arch Linux (неопределенная ссылка на __dso_handle)

  1. Я компилирую простой скетч, который считывает значения с аналогового входа. и активирует зуммер на цифровом входе.
  2. работает на Arduino uno.
  3. скетч компилируется и отлично работает в Windows и Arch Linux с помощью Arduino. IDE.

Недавно я попытался начать работать с Arduino-mk, я попытался скомпилировать указанный скетч и получил следующую ошибку компилятора (analogVal — это переменная, содержащая AnalogRead):

/usr/bin/avr-gcc -mmcu=atmega328p -Wl,--gc-sections -Os -o /home/niv/Gits/bin/uno/maglove/maglove.elf

~/Gits/bin/uno/maglove/maglove.ino.o ~/Gits/bin/uno/maglove/libcore.a  -lc -lm 
/home/niv/Gits/bin/uno/maglove/maglove.ino.o: In function `_GLOBAL__sub_I_nothing':
maglove.ino:(.text.startup._GLOBAL__sub_I_nothing+0xc): undefined reference to `__dso_handle'
maglove.ino:(.text.startup._GLOBAL__sub_I_nothing+0xe): undefined reference to `__dso_handle'
maglove.ino:(.text.startup._GLOBAL__sub_I_nothing+0x18): undefined reference to `__cxa_atexit'
/usr/bin/avr-ld: /home/niv/Gits/bin/uno/maglove/maglove.elf: hidden symbol `__dso_handle' isn't defined
/usr/bin/avr-ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
/home/niv/Gits/Arduino-Makefile/Arduino.mk:1416: recipe for target '/home/niv/Gits/bin/uno/maglove/maglove.elf' failed
make: *** [/home/niv/Gits/bin/uno/maglove/maglove.elf] Error 1
make: Target 'all' not remade because of errors.

У меня пока нет большого опыта работы с Arduino, и Google не смог найти эту ошибку или какое-либо ключевое слово из нее в контексте Arduino uno.

спасибо.

, 👍2

Обсуждение

Пожалуйста, добавьте строку компиляции. И погуглите "__dso_handle"., @Mikael Patel

@Mikael Микаэль, я добавил строку компиляции. все, что было до этого, — это просто компиляции библиотек, которые идут гладко, @NivPgir


1 ответ


Лучший ответ:

2

Не могу сказать, что полностью понимаю, что происходит, но кажется, что если добавить:

void * __dso_handle;

Возможно, вам удастся устранить одну из проблем. Вы можете попробовать тот же прием с __cxa_atexit.

Я нашел эту идею, выполнив поиск по:

ардуино __dso_handle

Это веб-страница, Я обнаружил, что это предполагает взлом void *.

,

странно... Это сработало! однако это кажется уродливым обходным путем, я бы предпочел понять, что вызывает эту ошибку, и исправить ее на моем компьютере с Linux, поскольку код должен быть хорошим для компиляции и в Windows, и что-то подсказывает мне, что добавление этих объявлений может сломать его при компиляции на окна., @NivPgir