синтаксическая ошибка protobuf при кросс-компиляции - PullRequest
0 голосов
/ 22 апреля 2020

Я построил свой проект, в котором есть как protobuf как зависимость в arm cpu и intel cpu (cross compile arm). В arm p c не имеет проблем для сборки, но в среде кросс-компиляции он имеет синтаксическую ошибку.

../usr/bin/protoc: Syntax error: ")" unexpected

В файле proto у него нет "(" или ") "символы.

Могу ли я построить проект с использованием пакета зависимостей, который компилируется кросс-компилятором?

1 Ответ

0 голосов
/ 22 апреля 2020

Это сообщение об ошибке crypti c часто вызывается попыткой выполнить программу, скомпилированную для другой архитектуры.

Процесс сборки предоставляет protoc исполняемый файл, но если вы пересекаетесь Компиляция is будет собираться для вашей целевой архитектуры, а не для x86_64.

Поскольку процесс сборки в один момент попытается использовать исполняемый файл protoc, созданный для его собственной цели, он не будет выполнен это в вашей x86_64 системе из-за несоответствия архитектуры.

Вы можете проверить, выполнив команду file ../usr/bin/protoc. В идеале вы должны видеть ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV) в выводе, но должны видеть ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV) или AArch64 эквивалент в случае, если я был бы прав.

При кросс-компиляции буфера протокола вы должны убедиться, что вы уже собрал / установил protoc для x86_64, а затем при настройке кросс-компиляции используйте следующую опцию:

./configure --with-protoc=protoc

Вам придется заменить protoc на местоположение x86_64 Прото c версия в том случае, если она не будет на вашем пути. См. Примечание для кросс-компиляции раздела документации по Буферу протокола.

...