Skip to content

Cross Compilation Causes protoc Missing Error #1864

@DaAwesomeP

Description

@DaAwesomeP

Hello!

I am able to compile fine for x86_64 on this system. When I try to cross-compile for aarch64, Autoconf is refusing to use the header files for protoc that are definitely present:

./configure --build x86_64-linux-gnu --host aarch64-linux-gnu CPPFLAGS=-Wno-deprecated-declarations
checking for libprotobuf... yes
checking for protoc... /usr/bin/protoc
checking protoc version... 3.12.4
checking google/protobuf/compiler/command_line_interface.h usability... no
checking google/protobuf/compiler/command_line_interface.h presence... yes
configure: WARNING: google/protobuf/compiler/command_line_interface.h: present but cannot be compiled
configure: WARNING: google/protobuf/compiler/command_line_interface.h:     check for missing prerequisite headers?
configure: WARNING: google/protobuf/compiler/command_line_interface.h: see the Autoconf documentation
configure: WARNING: google/protobuf/compiler/command_line_interface.h:     section "Present But Cannot Be Compiled"
configure: WARNING: google/protobuf/compiler/command_line_interface.h: proceeding with the compiler's result
configure: WARNING:     ## --------------------------------------------- ##
configure: WARNING:     ## Report this to [email protected] ##
configure: WARNING:     ## --------------------------------------------- ##
checking for google/protobuf/compiler/command_line_interface.h... no
configure: error: Cannot find the protoc header files

This appears to be coming from this auto-generated bit in ola.m4:

if test "$with_ola_protoc_plugin" != "no"; then
  OLA_PROTOC="$PROTOC --plugin=protoc-gen-cppservice=${with_ola_protoc_plugin}";
  echo "set ola_protoc to $OLA_PROTOC"
else
  OLA_PROTOC="$PROTOC --plugin=protoc-gen-cppservice=\$(top_builddir)/protoc/ola_protoc_plugin${EXEEXT}";
  AC_CHECK_HEADER(
      [google/protobuf/compiler/command_line_interface.h],
      [],
      AC_MSG_ERROR([Cannot find the protoc header files]))
  SAVED_LIBS=$LIBS
  LIBS="$LIBS -lprotoc"
  AC_LINK_IFELSE(
    [AC_LANG_PROGRAM([#include <google/protobuf/compiler/command_line_interface.h>],
      [google::protobuf::compiler::CommandLineInterface cli])],
    [TEST_LIBS="$TEST_LIBS -lprotoc"] [],
    [AC_MSG_ERROR([cannot find libprotoc])])
  LIBS=$SAVED_LIBS
fi
AC_SUBST([OLA_PROTOC])
AM_CONDITIONAL(BUILD_OLA_PROTOC_PLUGIN, test "${with_ola_protoc_plugin}" = "no")
])

I also tried this, but make all then fails because the protoc/ola_protoc_plugin executable doesn't actually get compiled:

./configure --build x86_64-linux-gnu --host aarch64-linux-gnu --with-protoc=/usr/bin/protoc --with-ola-protoc-plugin=protoc/ola_protoc_plugin CPPFLAGS=-Wno-deprecated-declarations
$ make all -j2
/usr/bin/protoc --plugin=protoc-gen-cppservice=protoc/ola_protoc_plugin --cppservice_out ./common/protocol --proto_path ./common/protocol ./common/protocol/Ola.proto
/usr/bin/protoc --plugin=protoc-gen-cppservice=protoc/ola_protoc_plugin --cppservice_out ./common/protocol --proto_path ./common/protocol ./common/protocol/Ola.proto
[libprotobuf WARNING google/protobuf/compiler/parser.cc:648] No syntax specified for the proto file: Ola.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
[libprotobuf WARNING google/protobuf/compiler/parser.cc:648] No syntax specified for the proto file: Ola.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
protoc/ola_protoc_plugin: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--cppservice_out: protoc-gen-cppservice: Plugin failed with status code 1.
make: *** [Makefile:19184: common/protocol/OlaService.pb.h] Error 1
make: *** Waiting for unfinished jobs....
protoc/ola_protoc_plugin: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--cppservice_out: protoc-gen-cppservice: Plugin failed with status code 1.
make: *** [Makefile:19184: common/protocol/OlaService.pb.cpp] Error 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions