Как создать файл .o из кода с помощью Arduino IDE (в первую очередь для соответствия LGPL3)
Я потратил много времени на поиск сообщений по этому поводу и ничего не нашел.
Причина, по которой мне нужно было это сделать, заключается в том, что я работаю над некоторым проприетарным кодом, который будет выпущен во встроенном устройстве, но использует библиотеку под лицензией LGPL 3.0, которая требует (4.d.0), которую я выпускаю " соответствующий код приложения в форме... разрешить пользователю рекомбинировать или повторно связать приложение с измененной версией библиотеки."
Поскольку приложение находится на встроенном устройстве, «соответствующий код приложения» работает с файлом .o предварительной ссылки, который обычно хорошо скрыт в процессе Arduino.
@Owen DeLong, 👍2
Обсуждение1 ответ
Чтобы извлечь .o, созданный во время компиляции в Arduino IDE, сделайте следующее:
- Перейдите в пункт меню Arduino->Настройки. Откроется окно настроек.
- В окне настроек найдите строку "Показывать подробный вывод во время" и убедитесь, что установлен флажок "Компиляция". (вы можете оставить загрузку включенной или выключенной по своему усмотрению).
- Нажмите "ОК", чтобы закрыть окно настроек.
- Скомпилируйте (или скомпилируйте и загрузите) свой скетч.
Вы получите много дополнительных результатов. В белом тексте вы увидите либо сообщения о компилируемых файлах, либо об «использовании ранее скомпилированного файла». В любом случае будет предоставлен путь, указывающий, где был скомпилирован ваш Sketch. В моей среде Mac это /var/folders/<длинная случайная строка>/T/arduino_build_<number>/sketch/<sketch_name>.ino.cpp.o
Строка, в которой компилируется ваш скетч, очень длинная, но путь также виден в большинстве строк библиотеки, и вместо этого вы можете просто перейти к .../sketch/...
.../library/...
вместо прокрутки до нужной строки вправо.
Чтобы найти точную строку, в которой компилируется ваш скетч, найдите строку непосредственно под строкой, которая просто говорит "Компиляция скетча..."
Я знаю, что это довольно просто (теперь, когда я знаю, как это сделать), но мне пришлось немало покопаться, чтобы найти его, и я подумал, что другим может понадобиться ответ, доступный для поиска.
Обратите внимание, что Arduino IDE по умолчанию компилируется с включенной [оптимизацией времени компоновки](https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Optimize-Options.html#index-fwhole-program), что затруднит другому пользователю сделать окончательную ссылку, поскольку «файлы байт-кода, сгенерированные в одной версии GCC, не работают с более старой или новой версией GCC». Я предлагаю вам скомпилировать -flto -ffat-lto-objects
, чтобы решить эту проблему., @Edgar Bonet
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Разница между print() и println()
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
Оуэн Делонг, как на арене интернет-инженерии? Просто интересно...давно это было., @stevieb
К вашему сведению, основная библиотека Arduino также является LGPL. https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/Arduino.h, @RubberDuck