Кросс-компиляция gRPC с использованием cmake - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь кросс-компилировать gRPC с помощью cmake.

Мне действительно удалось это сделать. К сожалению, мой метод включает в себя возиться внутри CMakeLists.txt.

Проблема заключалась в том, что когда я пытался скомпилировать gRPC, он использовал протобуфер, который он только что скомпилировал. Он не может запускать скомпилированные исполняемые файлы ARM на компьютере с архитектурой x86.

Мне удалось скомпилировать его, указав путь к protoc и grpc_cpp_plugin вручную в главном CMRLists.txt gRPC. Это грязно, и так как я хотел бы включить gRPC в качестве подмодуля, мне нужен чистый способ сделать это.

Кому-нибудь удалось кросс-компилировать gRPC с помощью cmake?

1 Ответ

0 голосов
/ 06 сентября 2018

Этот способ должен работать:

  1. Кросс-компилировать Protobuf для цели (ARM) и установить его.

    Убедитесь, что кросс-скомпилированный Protobuf можно найти в имеющейся у вас цепочке инструментов (ARM). Например. он устанавливается в системный префикс по умолчанию в sysroot.

  2. На хосте установите Protobuf той же версии . Он не должен быть доступен для поиска (то есть достаточно локальной установки пользователя).

  3. Кросс-компиляция gRPC со следующими параметрами (устанавливается в CMake GUI или как опция -D для cmake исполняемого файла):

    • gRPC_PROTOBUF_PROVIDER: пакет
    • gRPC_PROTOBUF_PACKAGE_TYPE: MODULE
    • Protobuf_PROTOC_EXECUTABLE: <путь к вашему хосту <code>protoc исполняемый файл>

Пояснения

Установка параметра gRPC_PROTOBUF_PROVIDER в «package» говорит gRPC не создавать свой собственный Protobuf, а использовать уже установленный вариант. Этот вариант ищется find_package(Protobuf).

Установка параметра gRPC_PROTOBUF_PACKAGE_TYPE в «MODULE» указывает gRPC не использовать файл «Config», предоставленный установкой Protobuf, для обнаружения вещей Protobuf (библиотек и исполняемых файлов). Файл конфигурации содержит жестко закодированные пути, которые нельзя изменить снаружи. Вместо этого для поиска Protobuf используется скрипт FindProtobuf.cmake .

Установка параметра Protobuf_PROTOC_EXECUTABLE указывает FindProtobuf.cmake сценарию не искать исполняемый файл Protobuf, но берет его из параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...