Как я могу скомпилировать собственные модули на моей машине AMD64 для ARM64 Raspberry Pi 3, работающей на Ubuntu MATE, с использованием электронного компоновщика? - PullRequest
0 голосов
/ 22 апреля 2019

В настоящее время я создаю приложение Electron, предназначенное для запуска на Raspberry Pi 3 B +, работающем под управлением Ubuntu MATE на архитектуре arm64. Чтобы ускорить разработку, я пишу код с использованием виртуальной машины, на которой также работает Ubuntu MATE. Используя electron-builder, я могу скомпилировать приложение для arm64, и оно прекрасно работает на пи.

Проблема, с которой я сталкиваюсь, возникает, когда я представляю библиотеку onoff для доступа к GPIO. Сборка по-прежнему завершается успешно, и приложение запускается на виртуальной машине, хотя и с сообщением об ошибке, в котором говорится, что он не может получить доступ к выводам (что, как я ожидаю, так как виртуальный блок не имеет фактического GPIO).

Onoff error on virtual box

В Pi приложение запускает некоторые процессы, но не открывается. Если я запускаю приложение с помощью командной строки, я получаю следующую ошибку:

A JavaScript error occurred in the main process
Uncaught Exception:
Error: /tmp/.org.chromium.Chromium.h1PhHe: cannot open shared object file: No such file or directory
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:160:31)
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:722:18)
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:169:18)
    at Module.load (internal/modules/cjs/loader.js:602:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:541:12)
    at Function.Module._load (internal/modules/cjs/loader.js:533:3)
    at Module.require (internal/modules/cjs/loader.js:640:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at bindings (/opt/Fllipper Plate Viewer/resources/app.asar/node_modules/bindings/bindings.js:112:48)
    at module.exports (/opt/Fllipper Plate Viewer/resources/app.asar/node_modules/epoll/epoll.js:5:31)

Я попытался установить buildDependenciesFromSource на true, но, похоже, это ничего не меняет. Я также использовал electron-rebuild. Я также попытался добавить epoll (используется onoff) в качестве прямой зависимости для моего собственного приложения.

Моя конфигурация для electron-webpack и electron-builder:

"electronWebpack": {
  "whiteListedModules": [
    "electron-json-storage"
  ]
},
"build": {
  "appId": "com.electron.fllipper-plate-viewer",
  "productName": "Fllipper Plate Viewer",
  "directories": {
    "output": "build",
    "buildResources": "assets"
  },
  "linux": {
    "category": "Utility",
    "target": [
      {
        "target": "deb",
        "arch": [
          "x64",
          "arm64"
        ]
      }
    ]
  }
}

Полагаю, что я что-то упускаю из-за использования electron-builder и как он восстанавливает собственные зависимости, такие как epoll, когда нацелено на конкретную архитектуру чипа? Может быть, я делаю неправильное предположение о том, как electron-webpack или webpack вообще обрабатывает внешние данные?

...