Как создать файл .o из кода с помощью Arduino IDE (в первую очередь для соответствия LGPL3)

Я потратил много времени на поиск сообщений по этому поводу и ничего не нашел.

Причина, по которой мне нужно было это сделать, заключается в том, что я работаю над некоторым проприетарным кодом, который будет выпущен во встроенном устройстве, но использует библиотеку под лицензией LGPL 3.0, которая требует (4.d.0), которую я выпускаю " соответствующий код приложения в форме... разрешить пользователю рекомбинировать или повторно связать приложение с измененной версией библиотеки."

Поскольку приложение находится на встроенном устройстве, «соответствующий код приложения» работает с файлом .o предварительной ссылки, который обычно хорошо скрыт в процессе Arduino.

, 👍2

Обсуждение

Оуэн Делонг, как на арене интернет-инженерии? Просто интересно...давно это было., @stevieb

К вашему сведению, основная библиотека Arduino также является LGPL. https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/Arduino.h, @RubberDuck


1 ответ


2

Чтобы извлечь .o, созданный во время компиляции в Arduino IDE, сделайте следующее:

  1. Перейдите в пункт меню Arduino->Настройки. Откроется окно настроек.
  2. В окне настроек найдите строку "Показывать подробный вывод во время" и убедитесь, что установлен флажок "Компиляция". (вы можете оставить загрузку включенной или выключенной по своему усмотрению).
  3. Нажмите "ОК", чтобы закрыть окно настроек.
  4. Скомпилируйте (или скомпилируйте и загрузите) свой скетч.

Вы получите много дополнительных результатов. В белом тексте вы увидите либо сообщения о компилируемых файлах, либо об «использовании ранее скомпилированного файла». В любом случае будет предоставлен путь, указывающий, где был скомпилирован ваш 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