«легкая» первая часть вашего вопроса
Из другого вопроса, на который вы ссылались, и расположения файла jni_md.h
в вашей системе, здесь есть опция «include», которая вам нужна добавьте к вашей команде g cc:
gcc -I/usr/lib/jvm/java-8-openjdk-armhf/include/linux
Более сложная вторая часть
Вторая часть вашего вопроса - как изменить конфигурацию сборки Bazel так что соответствующее включение сделано. Большие проекты, которые нужно компилировать на многих целевых платформах, основаны на сложных файлах конфигурации, в которых указан путь к указанным платформам c файлам / компиляторам. Сначала это может быть ошеломляющим и запутанным.
1. В чем проблема?
Если посмотреть на вашу ошибку, я вижу, что ошибка исходит из файла /home/pi/bazel/src/main/java/com/google/devtools/build/lib/syntax/BUILD:150:1
Ниже приведен отрывок , взятый из GitHub :
В этой части сценария сборки показаны различные конфигурации в зависимости от целевой платформы архитектуры (windows / freebsd ...), поскольку в зависимости от платформы расположение файла jni_md.h
будет различным.
# The C++ portion of the Starlark CPU profiler.
cc_binary(
name = "libcpu_profiler.so",
srcs = select({
"//src/conditions:darwin": ["cpu_profiler_posix.cc"],
"//src/conditions:linux_x86_64": ["cpu_profiler_posix.cc"],
"//conditions:default": ["cpu_profiler_unimpl.cc"],
}),
linkshared = 1,
deps = [":jni"],
)
# TODO(adonovan): move this to @bazel_tools//tools/jdk:jni where it belongs.
# TODO(adonovan): why is there no condition for "just linux"?
cc_library(
name = "jni",
hdrs = ["@bazel_tools//tools/jdk:jni_header"] + select({
"//src/conditions:linux_x86_64": ["@bazel_tools//tools/jdk:jni_md_header-linux"],
"//src/conditions:darwin": ["@bazel_tools//tools/jdk:jni_md_header-darwin"],
"//src/conditions:freebsd": ["@bazel_tools//tools/jdk:jni_md_header-freebsd"],
"//src/conditions:openbsd": ["@bazel_tools//tools/jdk:jni_md_header-openbsd"],
"//src/conditions:windows": ["@bazel_tools//tools/jdk:jni_md_header-windows"],
"//conditions:default": [],
}),
includes = ["../../../../../../../../../external/bazel_tools/tools/jdk/include"] + select({
# Remove these crazy prefixes when we move this rule.
"//src/conditions:linux_x86_64": ["../../../../../../../../../external/bazel_tools/tools/jdk/include/linux"],
"//src/conditions:darwin": ["../../../../../../../../../external/bazel_tools/tools/jdk/include/darwin"],
"//src/conditions:freebsd": ["../../../../../../../../../external/bazel_tools/tools/jdk/include/freebsd"],
"//src/conditions:openbsd": ["../../../../../../../../../external/bazel_tools/tools/jdk/include/openbsd"],
"//src/conditions:windows": ["../../../../../../../../../external/bazel_tools/tools/jdk/include/win32"],
"//conditions:default": [],
}),
)
Из вашей ошибки:
Платформа выполнения: //: default_host_platform
Похоже, вы компилируете проект в "default Конфигурация Если мы посмотрим на файл BUILD, то увидим, что при сборке с конфигурацией по умолчанию не указан путь cc_library:
cc_library(
name = "jni",
hdrs = ["@bazel_tools//tools/jdk:jni_header"] + select({
"//conditions:default": [], # IT IS EMPTY
}),
includes = ["../../../../../../../../../external/bazel_tools/tools/jdk/include"] + select({
"//conditions:default": [], # ALSO EMPTY HERE
}),
)
Это объясняет, почему путь к местоположению jni_md.h
не добавлено и почему вы получаете ошибку компиляции.
2. Как решить проблему?
Похоже, что между разработчиками идет обсуждение вопроса о добавлении простого "linux" в конфигурацию. Тем не менее, вы, кажется, компилируете в конфигурации «По умолчанию». Это может быть причиной root вашей проблемы, но я предполагаю, что есть причина, по которой вы используете эту конфигурацию.
Поскольку ваша система выглядит как «linux», добавление «linux конфигурации» в «по умолчанию» может решить проблему в вашем конкретном случае.
In файл BUILD, попробуйте изменить раздел cc_library на:
cc_library(
name = "jni",
hdrs = ["@bazel_tools//tools/jdk:jni_header"] + select({
...
"//conditions:default": ["@bazel_tools//tools/jdk:jni_md_header-linux"],
}),
includes = ["../../../../../../../../../external/bazel_tools/tools/jdk/include"] + select({
...
"//conditions:default": ["../../../../../../../../../external/bazel_tools/tools/jdk/include/linux"],
}),
)
Это скорее "исправление", чем постоянное решение. Сообщите нам, если оно работает или если вы получаете другую ошибку Комментарии и другие предложения приветствуются. Как предлагается в другом ответе, использование более старой версии Bazel также может устранить проблему.